这个jQuery代码片段会导致任何内存泄漏吗?

时间:2009-03-13 06:35:26

标签: javascript jquery memory-leaks closures

我想知道以下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编码中有害的“最佳实践”吗?

但我不知道我的理解是否正确。我希望你的评论和更正。谢谢!

3 个答案:

答案 0 :(得分:2)

此代码会导致Internet Explorer 6和Internet Explorer 7中的内存泄漏而不是其他浏览器请通过Douglas CrockfordIBM Devloper Site

引用这些箭头

答案 1 :(得分:1)

IE易泄漏。您可以使用Microsofts javascript memory leak detector在IE中测试代码是否存在泄漏。

Firefox也可能泄漏。 This article 解释了原因。 Firefox还有一个leak detector plugin(还没有测试过)。

答案 2 :(得分: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;

链接文档中的确切防漏建议是什么。