Constructeur WebAssembly.Global()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

Le constructeur WebAssembly.Global() permet de créer un nouvel objet Global représentant une instance d'une variable globale, accessible depuis le code JavaScript et importable/exportable dans plusieurs instances de WebAssembly.Module. Cela permet la liaison dynamique de plusieurs modules.

Syntaxe

js
new WebAssembly.Global(descripteur, valeur);

Paramètres

descripteur

Un objet dictionnaire GlobalDescriptor qui contient deux propriétés :

  • value: Une chaîne USVString représentant le type de données de la variable globale. Elle peut être i32, i64, f32, ou f64. USVString correspond à l'ensemble des différentes séquences Unicode scalaires possibles. USVString correspond à String lorsqu'il est renvoyé en JavaScript et est un type généralement utilisé par les API qui effectuent du traitement de texte et qui ont besoin de manipuler une chaîne de valeurs Unicode scalaire. USVString est équivalent à DOMString sauf qu'il n'accepte pas les codets surrogate non appairés. De tels caractères présents dans une valeur USVString seront convertis par le navigateur en caractères de remplacement Unicode : U+FFFD, (�).
  • mutable: Une valeur booléenne qui indique si la variable globale est modifiable ou non. Par défaut, elle vaut false.
valeur

La valeur que contient la variable. Ce peut être n'importe quelle valeur dont le type correspond au type de données de la variable. Si aucune valeur n'est indiquée, c'est une valeur 0 typée qui est utilisée, comme indiqué dans l'algorithme DefaultValue.

Exemples

Créer une nouvelle instance de Global

L'exemple suivant illustre une nouvelle instance de variable globale créée avec le constructeur WebAssembly.Global(). Dans cet exemple, on définit une variable globale modifiable, de type i32 avec une valeur initiale à 0.

La valeur de la variable globale est ensuite changée : d'abord en 42 avec la propriété Global.value, puis en 43 avec la fonction incGlobal() qu'on a exportée du module global.wasm (cette fonction ajoute 1 à toute valeur qui lui est fournie et renvoie la valeur obtenue).

js
const output = document.getElementById("output");

function assertEq(msg, got, expected) {
  output.innerHTML += `Test ${msg}: `;
  if (got !== expected)
    output.innerHTML += `ÉCHEC&nbsp;!<br>Résultat&nbsp; ${got}<br>Attendu&nbsp: ${expected}<br>`;
  else output.innerHTML += `SUCCÈS&nbsp;! Résultat&nbsp; ${got}<br>`;
}

assertEq("WebAssembly.Global existe", typeof WebAssembly.Global, "function");

const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);

WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
  ({ instance }) => {
    assertEq(
      "Obtenir une valeur initiale WASM",
      instance.exports.getGlobal(),
      0,
    );
    global.value = 42;
    assertEq(
      "Obtenir une valeur mise à jour depuis le code JS",
      instance.exports.getGlobal(),
      42,
    );
    instance.exports.incGlobal();
    assertEq(
      "Obtenir une valeur mise à jour depuis le code WASM",
      global.value,
      43,
    );
  },
);

Spécifications

Specification
WebAssembly JavaScript Interface
# dom-global-global

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi