Limited support 一部のブラウザのみ対応。使用時はサポート状況を確認すること。

概要

Explicit Resource Management(using 宣言)はスコープ終了時に自動的にリソースを解放する仕組みです。Symbol.dispose / Symbol.asyncDispose を実装したオブジェクトが対象です。

対応ブラウザ

機能 デスクトップ モバイル
Chrome
Edge
Firefox
Safari
Chrome Android
Safari iOS
134
134
141
134
AsyncDisposableStack.@@asyncDispose
134
134
141
134

AsyncDisposableStack() コンストラクタは、AsyncDisposableStack オブジェクトを生成します。

134
134
141
134

AsyncDisposableStack インスタンスの adopt() メソッドは、カスタムディスポーザ関数を提供することで、非同期ディスポーザブルプロトコルを実装していない値をスタックに登録します。

134
134
141
134

AsyncDisposableStackインスタンスのdefer()メソッドは、スタックが廃棄されるときに呼び出され待機するコールバック関数を取る。

134
134
141
134

AsyncDisposableStack インスタンスの disposeAsync() メソッドは、このスタックに登録されているすべてのディスポーザを登録の逆順で呼び出し、それぞれのディスポーザの完了を待ってから次のディスポーザを呼び出します。スタックがすでに破棄されている場合、このメソッドは何もしません。

134
134
141
134

AsyncDisposableStack インスタンスの disposed アクセサ・プロパティは、この AsyncDisposableStack がディスポされたかどうか、または以下のいずれかによって移動されたかどうかを示すブール値を返します:

134
134
141
134

AsyncDisposableStack インスタンスの move() メソッドは、このスタックと同じディスポーザを含む新しい AsyncDisposableStack インスタンスを作成し、ディスポーザを呼び出すことなく、このスタックを廃棄済みとしてマークします。

134
134
141
134

AsyncDisposableStack インスタンスの use() メソッドは、非同期使い捨てプロトコルを実装する値をスタックに登録する。

134
134
141
134
AsyncIterator.@@asyncDispose
134
134
141
134
その他

DisposableStack オブジェクトは、ディスポーザーのスタックを表します。スタックに登録したディスポーザーは、スタック自体が破棄される時に実行されます。ディスポーザーの関数は、強力なエラーハンドリングによる保証の元、登録した順番とは逆の順番で実行されます。ディスポーザーの move() メソッドを呼び出すと、現在登録しているディスポーザーを新しい DisposableStack に呼び出す責任を移譲し、追加のディスポーザーの登録を防止します。

134
134
141
134
ビルトインオブジェクト
DisposableStack.@@dispose
134
134
141
134

DisposableStack()コンストラクタは、DisposableStackオブジェクトを生成する。

134
134
141
134

DisposableStack インスタンスの adopt() メソッドは、カスタムディスポーザ関数を提供することで、使い捨てプロトコルを実装していない値をスタックに登録します。

134
134
141
134

DisposableStack インスタンスの defer() メソッドは、スタックが廃棄されるときに呼び出されるコールバック関数を受け取ります。

134
134
141
134

DisposableStack インスタンスの dispose() メソッドは、このスタックに登録されているすべてのディスポーザを登録の逆順で呼び出すことで、このスタックを破棄します。スタックがすでに廃棄されている場合、このメソッドは何もしません。

134
134
141
134

DisposableStackインスタンスのdisposedアクセサプロパティは、このDisposableStackが以下のいずれかを行うことで廃棄または移動されたかどうかを示すブール値を返します:

134
134
141
134

DisposableStack インスタンスの move() メソッドは、このスタックと同じディスポーザを含む新しい DisposableStack インスタンスを作成し、ディスポーザを呼び出すことなく、このスタックを廃棄済みとしてマークします。

134
134
141
134

DisposableStack インスタンスの use() メソッドは、使い捨てプロトコルを実装した値をスタックに登録する。

134
134
141
134
Iterator.@@dispose
134
134
141
134
その他

SuppressedError は、別のエラーを処理している際に発生したエラーを表すオブジェクトです。これは、Statements/using または Statements/await_using を使用したリソースの破棄中に生成されます。

134
134
141
134
ビルトインオブジェクト

SuppressedError() コンストラクタは、SuppressedError オブジェクトを作成します。

134
134
141
134

SuppressedError インスタンスの error data プロパティには、抑制の原因となったエラーへの参照が含まれます。

134
134
141
134

SuppressedErrorインスタンスのsuppressed dataプロパティには、エラー処理中に新しいエラーが発生したために抑制された元のエラーへの参照が含まれる。

134
134
141
134

Symbol.asyncDispose は静的データプロパティであり、ウェルノウンシンボルの Symbol.asyncDispose を表します。 Statements/await_using 宣言は、変数の初期化子において、変数がスコープ外になった際に呼び出すメソッドとしてこのシンボルを検索します。

127
127
141
127

Symbol.dispose は静的データプロパティであり、ウェルノウンシンボルの Symbol.dispose を表します。Statements/using 宣言は、変数の初期化子において、変数がスコープ外になった際に呼び出すメソッドとしてこのシンボルを検索します。

125
125
141
125
その他

await using 宣言は、非同期的に破棄されるブロックスコープのローカル変数を宣言します。 Statements/const と同様に、 await using で宣言された変数は初期化が必要であり、再代入できません。変数の値は null、undefined、または [[Symbol.asyncDispose]()](/ja/docs/Web/JavaScript/Reference/GlobalObjects/Symbol/asyncDispose) か [[Symbol.dispose]()](/ja/docs/Web/JavaScript/Reference/GlobalObjects/Symbol/dispose)…

134
134
141
134

using 宣言は、同期的に破棄されるブロックスコープのローカル変数を宣言します。 Statements/const と同様に、 using で宣言された変数は初期化が必要であり、再代入できません。変数の値は null、undefined、または [[Symbol.dispose]()](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/dispose) メソッドを持つオブジェクトのいずれかでなければなりません。変数がスコープ外になると、リソースを解放するために、オブジェクトの [Symbol.dispose]() メソッドが呼び出されます。

134
134
141
134
1+対応 (バージョン) 未対応 注釈あり サブ機能の解説は MDN Web Docs (CC BY-SA 2.5)

基本構文

JAVASCRIPT
// Automatically release resources using the `using` statement
{
  using file = openFile('data.txt');
  // Use file
} // `file[Symbol.dispose]()` is automatically called when the scope ends

// Asynchronous version
await using db = connectDB();

実務での使いどころ

  • Explicit resource management の活用

    using 宣言によるリソースの自動クリーンアップ。ファイルハンドルやDB接続の安全な解放に使用。

注意点

  • 一部のブラウザでのみ対応。使用前にブラウザサポートを確認すること。

アクセシビリティ

  • JavaScript による動的更新時は、aria-live リージョンで変更をスクリーンリーダーに通知する。

Powered by web-features