7

私の質問は、「長時間」表示されるWebページを作成していることを前提としています。このようなシナリオでJQuery/JavaScriptを使用すると、メモリリークが発生する一般的な落とし穴は何ですか?たとえば$.remove()、要素のコレクションを呼び出すと、メモリに関して何が起こりますか?ありがとう!

4

1 に答える 1

1

JavaScriptは、ガベージコレクションを使用して、使用されなくなった文字列、オブジェクト、配列、および関数によって占有されているメモリを再利用します。これにより、プログラマーはメモリの割り当てを明示的に解除する必要がなくなり、JavaScriptプログラミングをCプログラミングよりも簡単にする重要な部分になります。

参考資料: SOに関する詳細と回答については、これを確認してください。

イベント登録メカニズムMDNのメモリの問題

var i;  
var els = document.getElementsByTagName('*');  

// Case 1  
for(i=0 ; i<els.length ; i++){  
    els[i].addEventListener("click", function(e){/*do something*/}, false});  
}  

// Case 2  
function processEvent(e){  
    /*do something*/  
}  

for(i=0 ; i<els.length ; i++){  
  els[i].addEventListener("click", processEvent, false});  
}  

最初のケースでは、ループターンごとに新しい(匿名)関数が作成されます。2番目のケースでは、以前に宣言された同じ関数がイベントハンドラーとして使用されます。これにより、メモリ消費量が少なくなります。さらに、前者の場合、無名関数への参照が保持されていないため、ハンドラーへの参照がないため、element.removeEventListenerを呼び出すことはできませんが、後者の場合は、

myElement.removeEventListener("click", processEvent, false)
于 2012-04-25T14:54:37.180 に答える