闭包在IE浏览器中容易引起内存泄露,为什么?


在IE浏览器中,这段代码容易引起内存泄露,为什么?如何避免?

   
  function outerFunction()
  
{
var myElement = document.getElementById("div_id");
myElement.onclick = function() { this.innerHTML = "I'm a leak"};
}

讨论 JavaScript

才不是球呢 12 years, 9 months ago

IE 6造成内存泄露的最大原因是由于IE 6的垃圾回收机制对于javascript object内部,jscript使用的是mark-and-sweep(标记-清除)算法,而对于javascript object与外部object(包括native object和vbscript object等等)的引用时,IE 6使用的是计数器(引用计数)算法。

IE 6对于纯粹的Script Objects间的Circular References是可以正常处理,但它无法处理JScript与Native Object(例如Dom、ActiveX Object)之间的循环引用。所以,当我们出现Native对象(例如Dom、ActiveX Object)与Javascript对象间的循环引用时就会造成内存泄露。

这个就是IE 6造成内存泄露的主要原因

GlkGlk answered 12 years, 9 months ago

Your Answer