2011-07-11 20 views
5

我经常在第三方JavaScript代码看到,经过:为什么在document.getElementById-ed之后,对象必须被禁止使用IE?

var el = document.getElementById(elementId); 

对象往往是归零,并沿此操作发表评论说,这是对IE进行:

el = null; // IE 

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

+3

IIRC,这是因为IE否则在闭包范围内保留对_all_可访问变量的引用,这会使其泄漏未使用的非空引用。 – zneak

回答

6

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

例如:

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

JavaScript的子系统现在有一个参考el元件,和DOM子系统(所述el元件)具有对JavaScript对象的引用(函数加上它关闭在什么)。

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

相关问题