Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2021年4月.
* Some parts of this feature may have varying levels of support.
FinalizationRegistry オブジェクトにより、オブジェクトがガベージコレクションで回収されるときにコールバックを要求することができます。
FinalizationRegistry は、レジストリーに登録されているオブジェクトが回収される (ガベージコレクションされる) 時にクリーンアップコールバックを要求する方法を提供します。(クリーンアップコールバックはファイナライザーと呼ばれることもあります。)
メモ: クリーンアップコールバックは、重要なプログラムロジックには使用しないでください。詳細は、クリーンアップコールバックに関する注意事項を参照してください。
コールバックで渡すレジストリーを作成します。
次に、 register メソッドを呼び出して、クリーンアップコールバックを行いたいオブジェクトを登録し、そのオブジェクトと保持値を渡します。
レジストリーがオブジェクトへの強い参照を保持すると、目的に反してしまうので、 (レジストリーが強い参照を保持していれば、そのオブジェクトは決して回収されない)、強い参照は保持はしません。
theObject が回収された場合、クリーンアップコールバックは、指定した保持値 (上記の "some value") で呼び出される可能性があります。保持値は、プリミティブでもオブジェクトでも、 undefined であっても構いません。保持値がオブジェクトの場合、レジストリーはその値への強い参照を保持します (これにより、後でクリーンアップコールバックに渡すことができます)。
オブジェクトの登録を解除したい場合は、三番目の値を渡します。 これは、後でレジストリのレジストリの unregister 関数を呼び出してオブジェクトの登録を解除する際に使用する登録解除トークンです。レジストリーは、登録解除トークンへの弱い参照のみを保持します。
よくオブジェクト自身が登録解除トークンとして使われ、これは良い結果になります。
ただし、同じオブジェクトである必要はありません。異なるものでも構いません。
新しい FinalizationRegistry オブジェクトを生成します。
オブジェクトをレジストリーに登録して、オブジェクトがガベージコレクションされたときにクリーンアップコールバックが実行できるようにします。
FinalizationRegistry.prototype.unregister()オブジェクトをレジストリーから登録解除します。
FinalizationRegistry を正しく使用するには慎重に検討する必要があるため、できるだけ使用しない方がいいでしょう。また、仕様で保証されていない特定の動作に依存しないようにすることも重要です。ガベージコレクションがいつ、どのように、どのように行われるかは、それぞれの JavaScript エンジンの実装に依存します。あるエンジンで観察された動作が、別のエンジンや同じエンジンの別のバージョンでは異なるかもしれませんし、同じエンジンの同じバージョンでも若干異なる状況になるかもしれません。ガベージコレクションは、 JavaScript エンジンの実装者がその解決策を常に改良し続けている難しい問題なのです。
ここでは、 FinalizationRegistry が含まれている WeakRef の提案の著者が、その説明文書に盛り込んだ具体的なポイントを紹介します。
ガベージコレクター は複雑です。アプリケーションやライブラリーが、ガベージコレクターによる FinalizationRegistry のクリーンアップやファイナライザー [クリーンアップコールバック] の呼び出しをタイムリーに予測可能な方法で行うことに依存している場合、期待を裏切られる可能性があります。クリーンアップが予想よりもずっと遅く行われたり、まったく行われなかったりすることがあります。変化する原因には次のようなものがあります。
クリーンアップコールバックには、いくつかの注意点があります。
コールバックを渡すことでレジストリーを作成することができます。
そして、クリーンアップコールバックを呼び出す任意のオブジェクトを登録するには、 register メソッドを呼び出して、そのオブジェクトと保持値を渡します。
| ECMAScript® 2027 Language Specification # sec-finalization-registry-objects |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年6月24日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.