← 返回首页
WebAssembly.Global() 构造函数 - WebAssembly | MDN

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

WebAssembly.Global() 构造函数

基线 广泛可用

自 2020年3月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

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

变量包含的值。它可以是任意值,只要它的类型和变量的数据类型相匹配。如果没有指定值,当 descriptor.value 的值是 i32、i64、f32 或 f64 其中之一时,该值为对应类型的 0,如果 descriptor.value 是 externref 或 anyfunc 时,该值为 null(由 DefaultValue 算法指定)。

示例

创建一个新的 Global 实例

下面的例子展示的是用 WebAssembly.Global() 构造函数创建一个新的 global 实例。它被定义为可变的 i32 类型,值为 0。

然后改变 global 的值,首先用 Global.value 属性设置为 42,然后用从 global.wasm 模块导出的 incGlobal() 函数(它将接收到的参数的值加 1 并返回)设置为 43。

js
const output = document.getElementById("output"); function assertEq(msg, got, expected) { const result = got === expected ? `成功!获得:${got}\n` : `失败!\n获得:${got}\n期望的是:${expected}\n`; output.innerText += `测试${msg}:${result}`; } assertEq("WebAssembly.Global 存在", typeof WebAssembly.Global, "function"); const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0); WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then( ({ instance }) => { assertEq("从 wasm 获取初始值", instance.exports.getGlobal(), 0); global.value = 42; assertEq("从 wasm 获取用 JS 更新的值", instance.exports.getGlobal(), 42); instance.exports.incGlobal(); assertEq("从 JS 获取用 wasm 更新的值", global.value, 43); }, );

备注:你可以查看在 GitHub 上实时运行的示例;也可以查看源代码

规范

规范
WebAssembly JavaScript Interface
# dom-global-global

浏览器兼容性

启用 JavaScript 以查看此浏览器兼容性表。

参见