扫码关注官方订阅号
据说是因为循环引用但是这个attachEvent使用过程中具体怎么循环引用了呢?求指教^_^
欢迎选择我的课程,让我们一起见证您的进步~~
抱歉没怎么懂题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; //释放 }
因为ie下的垃圾回收机制,它采用的是引用计数,当a引用b而b又引用a时,内存就不会被回收。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
抱歉没怎么懂题O(∩_∩)O~不过希望有帮助。
IE的js对象和DOM对象使用不同的垃圾收集方法,因此闭包在IE中会导致内存泄露问题,也就是无法销毁驻留在内存中的元素。举个例子,需要去注销事件。
或者在引用DOM时对其释放,解除引用避免内存泄露。这里涉及到的内存泄露以及闭包等问题可参考我的文章,互相学习,共同进步。
因为ie下的垃圾回收机制,它采用的是引用计数,当a引用b而b又引用a时,内存就不会被回收。