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
的值为i32
、i64
、f32
或f64
之一,如果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 |
浏览器兼容性
BCD 表仅在浏览器中加载