我想知道以下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编码中有害的“最佳实践”吗?
但我不知道我的理解是否正确。我希望你的评论和更正。谢谢!
答案 0 :(得分:2)
此代码会导致Internet Explorer 6和Internet Explorer 7中的内存泄漏而不是其他浏览器请通过Douglas Crockford和IBM 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;
链接文档中的确切防漏建议是什么。