为什么 IE 对象在 document.getElementById 编辑后必须被清空?
我经常在第三方 JavaScript 代码中看到 after:
var el = document.getElementById(elementId);
object 经常被清空,并且该操作的注释说它是为 IE 完成的:
el = null; // IE
真正的目的是什么?有这方面的资源吗?
I often see in third party JavaScript code that after:
var el = document.getElementById(elementId);
object is often nulled and comment along this operation says that it is done for IE:
el = null; // IE
What's the real purpose? Any resource on that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过取消引用,它们打破了 DOM 对象和 JavaScript 对象之间相应的循环依赖关系,这些对象由旧版 IE 中的不同子系统控制(因此不可能被垃圾收集)。
例如:
JavaScript 子系统现在拥有对
el
元素的引用,而 DOM 子系统(el
元素)拥有对 JavaScript 对象(函数加上什么)的引用。它关闭)。不过,如果您通过
addEventListener
添加侦听器,则不必担心。要了解有关常见内存泄漏陷阱的更多信息,请参阅 http://www.ibm。 com/developerworks/web/library/wa-memleak/。
By nixing a reference they break the corresponding cyclic dependency between the DOM object and JavaScript objects, which are controlled by different sub-systems in older IE (thus being impossible to be garbage-collected).
For example:
The JavaScript subsystem has now a reference to the
el
element, and the DOM subsystem (theel
element) has a reference to the JavaScript object (the function plus what it closes in).You don't have to worry, though, if you add the listeners via
addEventListener
.To read more about common memory leak pitfalls, see http://www.ibm.com/developerworks/web/library/wa-memleak/.