首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

IE事件登记相关的内存泄露总结

2012-10-09 
IE事件注册相关的内存泄露总结经过一上午的艰苦试验验证,得出如下结论:1、将元素传入闭包,并在其中注册事件

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};})();


热点排行