https://qiita.com/rana_kualu/items/83783c6dd3b4b51fa77f
letやconstなどのローカル変数宣言ステートメントの一種で、変数が参照されなくなったときにリソース解放処理として [Symbol.dispose] が自動的に実行される。
通常は宣言したスコープ外に出た時点でリソース解放が実行されるが、クロージャによってキャプチャされていると参照されなくなるまでリソース解放は実行されない。
ちなみに [Symbol.dispose] をメンバとして持たないオブジェクトをusing宣言で代入しようとすると、`Uncaught TypeError: Symbol(Symbol.dispose) is not a function` エラーが発生する。
C# 8.0 の using に近い。
2026年現在、safari以外の主要ブラウザで実装されている。
{
using resource = {
value: "test",
[Symbol.dispose]() { console.log("RELEASE!"); }
};
console.log(resource.value); // "test"が出力される
// ここで自動で[Symbol.dispose]が呼びだされて"RELEASE!"が出力される
}