4

次のjqueryコードがメモリリークを引き起こすかどうか疑問に思っています:

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

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

しかし、本当にリークがあるとすれば、Manning が発行している人気の本「jQuery in Action」にそのようなコードがたくさんあることがわかります。jQueryコーディングの有害な「ベストプラクティス」ですか?

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

4

3 に答える 3

1

IE はリークしやすいです。Microsoft の javascript メモリ リーク ディテクターを使用して、IE でコードのリークをテストできます。

Firefox もリークする可能性があります。この記事では、その理由を説明します。Firefox 用のリーク検出プラグインもあります(まだテストしていません)。

于 2009-03-13T07:01:06.720 に答える
0

以前に提出された回答 (3 年前から、ため息) は間違っています。jQuery 1.0 - 1.2 はここでリークしますが、この質問が尋ねられたときの jQuery のバージョンを見るhttp://download.oldapps.com/jquery/jquery-1.3.js次の行がすべてのイベントを追加する関数に含まれていましたリスナー:

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

リンクされたドキュメントからの正確なリーク防止の提案です。

于 2012-08-07T04:46:44.850 に答える