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.

WebAssembly.Global はグローバル変数のインスタンスを表します。JavaScript からアクセスでき、1 つ以上の WebAssembly.Module インスタンス間でインポート/エクスポートすることができます。これにより複数のモジュールを動的にリンクすることができます。

コンストラクター

WebAssembly.Global()

新しい Global オブジェクトを生成します。

Global のインスタンス

すべての Global のインスタンスは Global() コンストラクターのプロパティオブジェクトを継承します。これによりすべての Global インスタンスを変更することができます。

インスタンスプロパティ

Global.prototype.constructor

このオブジェクトのインスタンスを生成した関数を返します。既定では、これは WebAssembly.Global() コンストラクターです。

Global.prototype[@@toStringTag]

@@toStringTag プロパティの初期値で、文字列値 "WebAssembly.Global" です。

Global.prototype.value

グローバル変数の中に含まれている値です。これにより、グローバル値を直接設定および取得することができます。

インスタンスメソッド

Global.prototype.valueOf()

グローバル変数の中に含まれている値を返す古い形のメソッドです。

新しい Global インスタンスの生成

以下の例では新しいグローバルインスタンスは WebAssembly.Global() コンストラクターを用いて初期化され、初期値 0 の変更可能な i32 型として定義されます。

その後この値は、Global.value プロパティを使うことによって 42 に、global.wasm モジュールから公開された(どんな値が与えられても 1 を加算して、新しい値を返す)incGlobal() 関数を使うことによって 43 になります。

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

function assertEq(msg, got, expected) {
  const result =
    got === expected
      ? `SUCCESS! Got: ${got}<br>`
      : `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
  output.innerHTML += `Testing ${msg}: ${result}`;
}

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

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

WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
  ({ instance }) => {
    assertEq(
      "getting initial value from wasm",
      instance.exports.getGlobal(),
      0,
    );
    global.value = 42;
    assertEq(
      "getting JS-updated value from wasm",
      instance.exports.getGlobal(),
      42,
    );
    instance.exports.incGlobal();
    assertEq("getting wasm-updated value from JS", global.value, 43);
  },
);

メモ: この例はGitHub 上の実行例で確認できます。また、ソースコードも参照してください。

仕様書

Specification
WebAssembly JavaScript Interface
# globals

ブラウザーの互換性

BCD tables only load in the browser

関連情報