WebAssembly.Global() 建構函式

一個 **WebAssembly.Global()** 建構函式建立一個新的 Global 物件,它表示一個全域性變數例項,可以從 JavaScript 訪問,並且可以跨一個或多個 WebAssembly.Module 例項匯入/匯出。這允許對多個模組進行動態連結。

語法

js
new WebAssembly.Global(descriptor, value)

引數

descriptor

一個包含兩個屬性的物件

  • value: 一個表示全域性資料型別的字串。可以是以下任何一個:
    • i32: 一個 32 位整數。
    • i64: 一個 64 位整數。(在 JavaScript 中,它表示為一個 BigInt
    • f32: 一個 32 位浮點數。
    • f64: 一個 64 位浮點數。
    • v128: 一個 128 位向量。
    • externref: 一個主機引用。
    • anyfunc: 一個函式引用。
  • mutable: 一個布林值,用於確定全域性變數是否可變。預設情況下,它是 false
value

變數包含的值。它可以是任何值,只要它的型別與變數的資料型別匹配。如果未指定值,則使用型別化的 0 值,其中 descriptor.value 的值為 i32i64f32f64 之一,如果 descriptor.valueexternrefanyfunc,則使用 null(如 DefaultValue 演算法 所指定)。

示例

建立新的 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 介面
# dom-global-global

瀏覽器相容性

BCD 表僅在瀏覽器中載入

另請參見