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-
变量包含的值。只要其类型与变量的数据类型匹配,它可以是任何值。如果未指定值,则当
descriptor.value是i32、i64、f32或f64时,将使用类型化的 0 值;如果descriptor.value是externref或anyfunc,则使用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 |
浏览器兼容性
加载中…