为什么在document.getElementById-ed之后对象必须被IE取消?

时间:2011-07-11 06:17:55

标签: javascript internet-explorer dom memory-leaks null

我经常在第三方JavaScript代码中看到:

var el = document.getElementById(elementId);

对象通常是无效的,并且沿着此操作发表评论说它是针对IE完成的:

el = null; // IE

真正的目的是什么?关于那个的任何资源?

1 个答案:

答案 0 :(得分:6)

通过修改引用,它们打破了DOM对象和JavaScript对象之间的相应循环依赖关系,这些对象由旧IE中的不同子系统控制(因此不可能被垃圾收集)。

例如:

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

JavaScript子系统现在具有对el元素的引用,DOM子系统(el元素)具有对JavaScript对象的引用(该函数加上它关闭的内容)。 / p>

但是,如果您通过addEventListener添加听众,则不必担心。

要了解有关常见内存泄漏缺陷的更多信息,请参阅http://www.ibm.com/developerworks/web/library/wa-memleak/