据说是因为循环引用
但是这个attachEvent使用过程中具体怎么循环引用了呢?
求指教^_^
PHP中文网2017-04-11 12:51:25
抱歉没怎么懂题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 = op.innerHTML;
oId.onclick = function () {
console.log(html);
};
oId = null; //释放
}