4

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

但我不知道我的理解是否正确。希望大家多多指正和指正。谢谢!

4

3 回答 3

2

此代码将导致 Internet Explorer 6 和 Internet Explorer 7 中的内存泄漏不在其他浏览器中,请参阅Douglas CrockfordIBM Devloper Site的这些文章

于 2009-03-13T06:39:27.773 回答
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 回答