Javascript 为什么IE的对象在document.getElementById-ed之后必须为null?
我经常在第三方JavaScript代码中看到: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
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在闭包作用域中保留对所有可访问变量的引用,这使得它泄漏未使用的非空引用。