Javascript 为什么IE的对象在document.getElementById-ed之后必须为null?

Javascript 为什么IE的对象在document.getElementById-ed之后必须为null?,javascript,internet-explorer,dom,memory-leaks,null,Javascript,Internet Explorer,Dom,Memory Leaks,Null,我经常在第三方JavaScript代码中看到: var el = document.getElementById(elementId); 对象通常为空,此操作中的注释表示已为IE完成: el = null; // IE 真正的目的是什么?这上面的任何资源?通过禁用引用,它们打破了DOM对象和JavaScript对象之间相应的循环依赖关系,后者由旧IE中的不同子系统控制(因此不可能被垃圾收集) 例如: var el = document.getElementById(elementId); e

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

var el = document.getElementById(elementId);
对象通常为空,此操作中的注释表示已为IE完成:

el = null; // IE

真正的目的是什么?这上面的任何资源?

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

例如:

var el = document.getElementById(elementId);
el.onclick = function () { // here the cyclic reference is created
    /...
};
JavaScript子系统现在有一个对
el
元素的引用,而DOM子系统(
el
元素)有一个对JavaScript对象的引用(函数加上它关闭的部分)

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


要了解有关常见内存泄漏陷阱的更多信息,请参阅。

IIRC,这是因为IE在闭包作用域中保留对所有可访问变量的引用,这使得它泄漏未使用的非空引用。