2009-03-13 18 views
4

次のjQueryコードは、任意のメモリリーク生じた場合、私は疑問に思って:私の理解のためにこのjQueryコードスニペットはメモリリークを引き起こしますか?

$(function() {     
    var parent=$('table#mytable tbody').get(0); 
    $('tr:last', parent).click(function(){...}); 
}); 

$('tr:last', parent)は、DOMオブジェクトである最後の行ですが、匿名関数では、クロージャはこのDOMオブジェクトを持っています、 DOMオブジェクトとjsオブジェクトの間に循環参照があります。

しかし、実際に漏れがあると、マニングが発行した人気のある本 "jQuery in Action"にこの種のコードがたくさんあることがわかります。 jQueryコーディングで有害な "ベストプラクティス"ですか?

しかし、私の理解が正しいかどうかはわかりません。私はあなたのコメントと訂正を願っています。ありがとう!

答えて

2

このコードではない他のブラウザDouglas Crockfordすることにより、これらのaritclesを参照しIBM Devloper Site

+0

firefoxにこのようなリークがありますか? – jscoot

+0

ファイアフォックスにはこのようなリークだけがありません。つまりこれがあります。 –

+0

質問はjQueryに関するもので、少なくとも2009年1月にリリースされたjQueryバージョンの場合、このコードは漏れません。この答えは間違っています。私の正しい答えは以下を見てください。 – umassthrower

1

IEが漏れやすくなる下さいでのInternet Explorer 6とInternet Explorer 7でのメモリリークが発生します。 Microsofts javascript memory leak detectorを使用して、IEでコードのリークをテストできます。

Firefoxもリークする可能性があります。 This articleはその理由を説明します。 Firefox用のleak detector pluginもあります(まだテストしていません)。

+0

Firefoxリークディテクタのプラグインをテストしました。stackoverflowには多くのリークがあります! – KooiInc

+0

は、私たちのブラウザエンジンのように、Web 2.0と今後のために改革が必要なようです:-) – jscoot

0

これまでに提出された回答(3年前、一숨)は間違っています。 - jQueryの1.0ながら1.2がここに漏れてしまう、この質問は、次の行は、すべてのイベントリスナーを追加する機能に含まれていたhttp://download.oldapps.com/jquery/jquery-1.3.js頼まれたときからのjQueryのバージョンを見て:正確な漏洩防止の提案がある

 // Nullify elem to prevent memory leaks in IE 
    elem = null; 

リンクされたドキュメントから。

関連する問題