A WebAssembly.Global()
constructor creates a new Global
object representing a global variable instance, accessible from both JavaScript and importable/exportable across one or more WebAssembly.Module
instances. This allows dynamic linking of multiple modules.
Syntax
new WebAssembly.Global(descriptor, value);
Parameters
- descriptor
- A
GlobalDescriptor
dictionary object, which contains two properties:value
: AUSVString
representing the data type of the global. This can be one ofi32
,i64
,f32
, andf64
.mutable
: A boolean value that determines whether the global is mutable or not. By default, this isfalse
.
- value
- The value the variable contains. This can be any value, as long as its type matches the variable's data type. If no value is specified, a typed 0 value is used, as specified by the
DefaultValue
algorithm.
Examples
Creating a new Global instance
The following example shows a new global instance being created using the WebAssembly.Global()
constructor. It is being defined as a mutable i32
type, with a value of 0.
The value of the global is then changed, first to 42
using the Global.value
property, and then to 43 using the incGlobal()
function exported out of the global.wasm
module (this adds 1 to whatever value is given to it and then returns the new value).
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); });
Note: You can see the example running live on GitHub; see also the source code.
Specifications
Specification |
---|
WebAssembly JavaScript Interface The definition of 'WebAssembly.Global() constructor' in that specification. |
Browser compatibility
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Global() constructor | Chrome Full support 69 | Edge No support No | Firefox Full support 62 | IE No support No | Opera No support No | Safari No support No | WebView Android Full support 69 | Chrome Android Full support 69 | Firefox Android Full support 62 | Opera Android No support No | Safari iOS No support No | Samsung Internet Android Full support 10.0 | nodejs No support No |
Legend
- Full support
- Full support
- No support
- No support