этот фрагмент кода jQuery вызывает утечку памяти? - PullRequest
4 голосов
/ 13 марта 2009

Мне интересно, вызывает ли утечка памяти следующий код 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?

Но я не знаю, правильно ли мое понимание. Надеюсь ваши комментарии и исправления. Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 марта 2009

Этот код вызовет утечку памяти в Internet Explorer 6 и Internet Explorer 7, а не в другом браузере. Пожалуйста, отнесите эти артикли к Дугласу Крокфорду и IBM Devloper Site

1 голос
/ 13 марта 2009

IE подвержен утечкам. Вы можете проверить свой код на наличие утечек в IE с помощью детектора утечки памяти javascript Microsoft .

Firefox тоже может течь. Эта статья объясняет почему. Существует также плагин для обнаружения утечек для Firefox (еще не тестировал).

0 голосов
/ 07 августа 2012

Ранее представленные ответы (от 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;

Что является точным предложением по предотвращению утечек из связанной документации.

...