猿问

为什么给DOM元素用attachEvent添加事件会引起内存泄露?

据说是因为循环引用
但是这个attachEvent使用过程中具体怎么循环引用了呢?
求指教^_^

梵蒂冈之花
浏览 684回答 1
1回答

UYOU

抱歉没怎么懂题O(∩_∩)O~不过希望有帮助。IE的js对象和DOM对象使用不同的垃圾收集方法,因此闭包在IE中会导致内存泄露问题,也就是无法销毁驻留在内存中的元素。举个例子,需要去注销事件。function ready(fn){    if(document.addEventListener) {        //标准浏览器         document.addEventListener('DOMContentLoaded', function() {            //注销事件, 避免反复触发             document.removeEventListener('DOMContentLoaded',arguments.callee, false);             fn();            //执行函数         }, false);     }else if(document.attachEvent) {        //IE         document.attachEvent('onreadystatechange', function() {            if(document.readyState == 'complete') {                         document.detachEvent('onreadystatechange', arguments.callee);                 fn();        //函数执行             }         });     } };或者在引用DOM时对其释放,解除引用避免内存泄露。function fn(){    var oId = document.getElementById('id');    var html = oDiv.innerHTML;     oId.onclick = function () {        console.log(html);     };     oId = null;  //释放}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答