IE事件注册相关的内存泄露总结
经过一上午的艰苦试验验证,得出如下结论:
1、将元素传入闭包,并在其中注册事件,这是导致内存泄露的根源之一;另一必要条件是:元素必须脱离文档树,亦即类似执行了语句:
以上是dom2的事件注册方式,再来看看dom1的:
当然,如果你愿意,完全可以把'onclick'换成任意一个你喜欢的属性:
如果不把test传入闭包,则不会泄露:
总结:IE事件模型内存泄露的本质其实就是元素、作用域、事件处理函数之间循环引用。var test=document.getElementById('test');(function(test){//作用域Adocument.getElementById('test').onclick=hander;function hander(){//作用域B};})(test);//将test传入闭包//A引用test,test引用了hander,hander通过作用域B又引用了A,形成了回路。//由此可以引出如下例子,它也会泄露:(function(){//作用域Avar test=document.createElement('dl');test.onclick=hander;function hander(){//作用域B};})();