Unhooking事件处理程序是否需要避免IE中的内存泄漏

时间:2012-07-12 22:20:03

标签: javascript dom

我在IE中遇到了一些内存泄漏问题。

我一直在阅读,IE中没有解开事件处理程序,可能会导致内存泄漏。这是真的吗? 当用户离开页面时,不能分离事件处理程序会导致我的内存泄漏吗?

2 个答案:

答案 0 :(得分:1)

Douglas Crockford有excellent post on JSscript memory leaks(JScript是IE的JavaScript / ECMAScript实现)。

它基本上归结为:IE为DOM和JScript提供单独的内存管理(以及垃圾收集)。因此,IE无法清除DOM对象和事件处理程序之间的循环引用。

解决此问题的方法是确保在丢弃DOM对象之前始终从DOM对象中删除事件处理程序(或将它们设置为null)。

答案 1 :(得分:0)

有些旧浏览器遇到了与此相关的问题。当有注册事件处理程序时,请考虑这一点;

1)在脚本引擎中保留了一个回调注册表,一个事件绑定了两个东西,一个DOMNode和一个函数指针

2)DOMNode可能“消失” - 同样的事情可能会“发生”到函数中(虽然不太可能)。

<a onclick="a = (a?a+1:0);" id="getme">...之类的代码会产生一个无穷大的函数,您将通过var anchor = document.getElementById('getme'); anchor.onclick引用它。为了完全清除它,除了分离eventlistener之外,还必须delete anchor.onclick

有些人可能会对此代码感到遗憾,但它肯定会消除掉锚点

var a=document.getElementById('getme')
window.detachEvent("onclick", a.onclick);
delete a.onclick;
a.parentNode.removeChild(a)