jay*_*rjo 5 javascript null internet-explorer dom memory-leaks
我经常在第三方JavaScript代码中看到:
var el = document.getElementById(elementId);
Run Code Online (Sandbox Code Playgroud)
对象通常是无效的,并且沿着此操作发表评论说它是针对IE完成的:
el = null; // IE
Run Code Online (Sandbox Code Playgroud)
真正的目的是什么?关于那的任何资源?
通过nixing引用,它们打破了DOM对象和JavaScript对象之间的相应循环依赖性,这些对象由旧IE中的不同子系统控制(因此不可能被垃圾收集).
例如:
var el = document.getElementById(elementId);
el.onclick = function () { // here the cyclic reference is created
/...
};
Run Code Online (Sandbox Code Playgroud)
JavaScript子系统现在具有对该el元素的引用,并且DOM子系统(该el元素)具有对JavaScript对象的引用(该函数加上它关闭的内容).
但是,如果通过添加侦听器,则不必担心addEventListener.
要阅读有关常见内存泄漏缺陷的更多信息,请访问http://www.ibm.com/developerworks/web/library/wa-memleak/.