【问题标题】:Why object has to be nulled for IE after it was document.getElementById-ed?为什么在经过 document.getElementById-ed 之后必须为 IE 清空对象?
【发布时间】:2011-10-02 13:12:25
【问题描述】:

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

var el = document.getElementById(elementId);

对象通常为空,并且对该操作的注释说它是为 IE 完成的:

el = null; // IE

真正的目的是什么?有这方面的资源吗?

【问题讨论】:

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

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


【解决方案1】:

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

例如:

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

JavaScript 子系统现在有一个对 el 元素的引用,而 DOM 子系统(el 元素)有一个对 JavaScript 对象(函数加上它关闭的对象)的引用。

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

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

【讨论】:

    猜你喜欢
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多