5
我经常在第三方JavaScript代码看到,经过:为什么在document.getElementById-ed之后,对象必须被禁止使用IE?
var el = document.getElementById(elementId);
对象往往是归零,并沿此操作发表评论说,这是对IE进行:
el = null; // IE
什么是真正的目的是什么?任何资源?
我经常在第三方JavaScript代码看到,经过:为什么在document.getElementById-ed之后,对象必须被禁止使用IE?
var el = document.getElementById(elementId);
对象往往是归零,并沿此操作发表评论说,这是对IE进行:
el = null; // IE
什么是真正的目的是什么?任何资源?
通过nixing一个引用,它们打破了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否则在闭包范围内保留对_all_可访问变量的引用,这会使其泄漏未使用的非空引用。 – zneak