今回は、IE9 以前のバージョンの JS でメモリ リークが発生した場合の対処方法と、IE9 より前のバージョンで JS でメモリ リークが発生した場合の注意事項について説明します。実際のケースを見てみましょう。
IE9 より前のバージョンでは、JScript オブジェクトと COM オブジェクトに対して異なるガベージ コレクション ルーチンが使用されているため (COM オブジェクトは「参照カウント」コレクション戦略を使用します)、これらのバージョンの IE ではクロージャーによっていくつかの特別な問題が発生します。具体的には、HTML 要素 がクロージャのスコープに格納されている場合、その要素は破棄できないことを意味します。 次の例を見てください:
function assignHandler() { var elem = document.getElementById('elem_id'); elem.onclick = function(evt) { alert(elem.id); }; }
イベント ハンドラー プログラムとしてクロージャを作成し、このクロージャは循環参照を作成します。 匿名関数はassignHandler()のアクティブオブジェクトへの参照を保存するため、elemの参照数を減らすことはできません。無名関数が存在する限り、elem の参照番号は少なくとも 1 であるため、それが占有するメモリが再利用されることはありません。
上記のコードは、少し変更することで解決できます:function assignHandler() { var elem = document.getElementById('elem_id'); var elem_id = elem.id; elem.onclick = function(evt) { alert(elem_id); }; elem = null; }
DOM オブジェクト への参照を解放し、その参照の数をスムーズに減らし、それによって占有されているメモリを適切にリサイクルすることができます。」
この記事の事例を読んだ後は、その他の関連記事を参照してください。 推奨読書: vue.extend を使用してアラート モーダル ボックス ポップアップ コンポーネントを実装する方法
以上がIE9 より前のバージョンでの JS メモリ リークに対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。