TL;DR
WebAssembly Module を実行できる状態にしたもの。
仕組み
MDN によると、JavaScript の WebAssembly.Instance は、ステートフルで実行できる WebAssembly.Module のインスタンスである。JavaScript から WebAssembly のコードを呼び出すための、エクスポートされた関数をすべて含む。exports プロパティは、エクスポートされた関数をメンバーに持つ読み取り専用のオブジェクトを返す。
処理はサンドボックスの中で行われるので、ブラウザが持つリソースにはアクセスできない。たとえば JavaScript の変数にはアクセスできない。
例
MDN は、インスタンスを非同期で取得することを勧めている。JavaScript では WebAssembly.instantiateStreaming でモジュールをコンパイルし、インスタンス化する。戻り値の instance(WebAssembly.Instance)の exports から、export section で宣言された関数を呼べる。
const { module, instance } = await WebAssembly.instantiateStreaming(fetch("add.wasm"))
const four = instance.exports.add_two(2)