チャプター ガベージコレクション で学んだ通り、JavaScriptエンジンは、それが到達可能な(そして潜在的に利用される可能性がある)間、メモリ上に値を保持しています。 例: let john = { name: "John" }; // オブジェクトへはアクセス可能です。john がその参照を持っています // 参照を上書きします john = null; // オブジェクトはメモリから削除されるでしょう 通常、オブジェクトまたは配列の要素、もしくは別のデータ構造のプロパティは到達可能と考えられ、そのデータ構造がメモリにいる間は保持され続けます。 例えば、あるオブジェクトを配列に入れた場合、その配列が生きている間は、他の参照がなくてもそのオブジェクトは生きていることになります。 例:
![WeakMap と WeakSet](https://cdn-ak-scissors.b.st-hatena.com/image/square/f83c2c0fb97ea2074ea39f0003a1018bd0efe0bf/height=288;version=1;width=512/https%3A%2F%2Fja.javascript.info%2Fimg%2Fsite_preview_en_1200x630.png)