Почему объект должен быть обнулен для IE после того, как он был document.getElementById-ed? - PullRequest
5 голосов
/ 11 июля 2011

Я часто вижу в стороннем коде JavaScript, что после:

var el = document.getElementById(elementId);

объект часто обнуляется, и комментарий к этой операции говорит, что это сделано для IE:

el = null; // IE

настоящая цель?Любой ресурс по этому поводу?

1 Ответ

6 голосов
/ 11 июля 2011

Обнуляя ссылку, они нарушают соответствующую циклическую зависимость между объектом DOM и объектами JavaScript, которые управляются различными подсистемами в более старом IE (таким образом, невозможно собирать мусор).

Дляпример:

var el = document.getElementById(elementId);
el.onclick = function () { // here the cyclic reference is created
    /...
};

Подсистема JavaScript теперь имеет ссылку на элемент el, а подсистема DOM (элемент el) имеет ссылку на объект JavaScript (функцию плюс то, что она закрывает)in).

Вам не нужно беспокоиться, если вы добавите слушателей через addEventListener.

Чтобы узнать больше о распространенных ошибках утечки памяти, см. http://www.ibm.com/developerworks/web/library/wa-memleak/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...