David Flanagan は、彼の著書JavaScript: The Definitive Guideでこれに非常にうまく答えています。
JavaScript インタープリターは、メモリ管理のために自動ガベージ コレクションを実行します。これは、プログラムが必要に応じてオブジェクトを作成できることを意味し、プログラマーはそれらのオブジェクトの破棄や割り当て解除について心配する必要はありません。オブジェクトに到達できなくなった場合、つまりプログラムがそのオブジェクトを参照する方法がなくなった場合、インタプリタはそのオブジェクトが二度と使用できないことを認識し、占有していたメモリを自動的に回収します。
これは、JavaScript でメモリ リークが発生しないという意味ではありません。それからはほど遠い。循環 (または循環) 参照は、参照カウントを実装するブラウザーで頻繁に発生する問題です。
循環参照は、2 つのオブジェクトが相互に参照するときに形成され、各オブジェクトの参照カウントは 1 になります。純粋にガベージ コレクション システムでは、循環参照は問題になりません。関連するオブジェクトがいずれも他のオブジェクトから参照されていない場合、循環参照は問題になりません。どちらもガベージ コレクションです。ただし、参照カウント システムでは、参照カウントがゼロになることはないため、どちらのオブジェクトも破棄できません。ガベージ コレクションと参照カウントの両方が使用されているハイブリッド システムでは、システムが循環参照を識別できないため、リークが発生します。この場合、DOM オブジェクトも JavaScript オブジェクトも破棄されません。リスト 1 は、JavaScript オブジェクトと DOM オブジェクトの間の循環参照を示しています。
Web サイトに JavaScript のメモリ リークが含まれているのではないかと心配している場合、Google には「JavaScript のリーク ファインダー」という適切な名前のツールがあり、原因を見つけるのに役立ちます。
さらに読む: JavaScript ガベージ コレクションとは