WebAssembly.Global

Baseline 已廣泛支援

此功能已經成熟,並可在許多裝置和瀏覽器版本上使用。自 ⁨2020 年 3 月⁩起,它已在各瀏覽器中推出。

WebAssembly.Global 物件表示一個全域性變數例項,該例項可以從 JavaScript 訪問,並且可以被一個或多個 WebAssembly.Module 例項匯入/匯出。這允許多個模組進行動態連結。

建構函式

WebAssembly.Global()

建立一個新的 Global 物件。

全域性例項

所有 Global 例項都繼承自 Global() 建構函式的原型物件 — 這可以被修改以影響所有 Global 例項。

例項屬性

Global.prototype.constructor

返回建立此物件例項的函式。預設情況下,這是 WebAssembly.Global() 建構函式。

Global.prototype[Symbol.toStringTag]

[Symbol.toStringTag] 屬性的初始值是字串值 "WebAssembly.Global"。

Global.prototype.value

全域性變數中包含的值 — 可用於直接設定和獲取全域性變數的值。

例項方法

Global.prototype.valueOf()

舊式方法,返回全域性變數中包含的值。

示例

建立新的 Global 例項

以下示例顯示了使用 WebAssembly.Global() 建構函式建立的新全域性例項。它被定義為可變的 i32 型別,值為 0。

然後,全域性變數的值被更改,首先使用 Global.value 屬性更改為 42,然後使用從 global.wasm 模組匯出的 incGlobal() 函式更改為 43(該函式將 1 新增到給定值,然後返回新值)。

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

function assertEq(msg, got, expected) {
  const result =
    got === expected
      ? `SUCCESS! Got: ${got}\n`
      : `FAIL!\nGot: ${got}\nExpected: ${expected}\n`;
  output.innerText += `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 上即時執行示例;另請參閱原始碼

規範

規範
WebAssembly JavaScript 介面
# 全域性變數

瀏覽器相容性

另見