为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2018-09-12 13:09:31
据说是因为循环引用但是这个attachEvent使用过程中具体怎么循环引用了呢?求指教^_^
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

抱歉没怎么懂题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;  //释放}


查看完整回答
反对 回复 2018-10-11
  • 1 回答
  • 0 关注
  • 683 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信