A WebAssembly.Global object represents 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.

Constructor Syntax

var myGlobal = new WebAssembly.Global(descriptor, value);

Parameters

descriptor
A GlobalDescriptor dictionary object, which contains two properties:
  • value: A USVString representing the data type of the global. This can be one of i32, i64, f32, and f64.
  • mutable: A boolean value that determines whether the global is mutable or not. By default, this is false.
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.

Function properties of the Global constructor

None.

Global instances

All Global instances inherit from the Global() constructor's prototype object — this can be modified to affect all Global instances.

Instance properties

Global.prototype.constructor
Returns the function that created this object's instance. By default this is the WebAssembly.Global() constructor.
Global.prototype[@@toStringTag]
The initial value of the @@toStringTag property is the String value "WebAssembly.Global".
Global.prototype.value
The value contained inside the global variable — this can be used to directly set and get the global's value.

Instance methods

Global.prototype.valueOf()
Old-style method that returns the value contained inside the global variable.

Examples

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 Status Comment
WebAssembly JavaScript Interface
The definition of 'WebAssembly.Global()' in that specification.
Working Draft Initial draft definition.

Browser compatibility

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic supportChrome Full support 69Edge No support NoFirefox Full support 62IE No support NoOpera No support NoSafari No support NoWebView Android Full support 69Chrome Android Full support 69Edge Mobile No support NoFirefox Android Full support 62Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
valueChrome Full support 69Edge No support NoFirefox Full support 62IE No support NoOpera No support NoSafari No support NoWebView Android Full support 69Chrome Android Full support 69Edge Mobile No support NoFirefox Android Full support 62Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
valueOfChrome Full support 69Edge No support NoFirefox Full support 62IE No support NoOpera No support NoSafari No support NoWebView Android Full support 69Chrome Android Full support 69Edge Mobile No support NoFirefox Android Full support 62Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No

Legend

Full support  
Full support
No support  
No support

See also

Document Tags and Contributors

Contributors to this page: chrisdavidmills, sideshowbarker, jpmedley
Last updated by: chrisdavidmills,