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 和 importable/exportable 访问,跨越一个或多个 WebAssembly.Module 实例。他允许被多个模块动态连接。

构造函数

WebAssembly.Global()

创建一个新的 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 的值发生改变,首先设置Global.value 为 42,然后使用导出函数 incGlobal() 增加为 43. 导出函数在 global.wasm 模块中 (它将参数的值加一并返回).

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

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

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

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Global
Global() constructor
value
valueOf

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
See implementation notes.

参见