a.r=a;純粋な ECMAScript オブジェクトは、他のオブジェクトがオブジェクト a と b を参照していない限り、オブジェクト a と b も同様です。つまり、これらは単なる相互参照であり、ガベージ コレクション システムによって引き続き認識され、処理されます。ただし、Internet Explorer では、循環参照内のオブジェクトのいずれかが DOM ノードまたは ActiveX オブジェクトである場合、ガベージ コレクション システムは、それらの間の循環関係がシステム内の他のオブジェクトから分離されていることを検出せず、それらを解放します。最終的には、ブラウザが閉じるまでメモリ内に保持されます。 3. コードをコピーします。
コードは次のとおりです。
var elem = document .getElementById( 'test'); elem.addEventListener('click', function() { alert('あなたは ' elem.tagName をクリックしました); }); 🎜>これ このコードは、DOM ノードのクリック イベント処理関数として匿名関数を登録し、関数内で DOM オブジェクトの要素を参照し、クロージャを形成します。これにより、循環参照が生成されます。つまり、DOM-> Closure->DOM-> Closure... DOM オブジェクトは、クロージャが解放されるまで解放されず、クロージャは DOM のイベント処理関数として機能します。オブジェクトが存在するため、DOM オブジェクトが解放される前にクロージャは解放されません。DOM ツリー内で DOM オブジェクトが削除されても、この循環参照が存在するため、DOM オブジェクトもクロージャも解放されません。このメモリ リークを回避するには、次の方法を使用できます。