我是否必须在window.onunload事件上清除自定义属性(Expandos)?

时间:2010-05-03 07:15:29

标签: javascript dom memory-leaks custom-properties

在一篇文章中,我看到清除window.unload事件上的所有expando以防止内存泄漏可能会很好。

我无法理解为什么这样做。

一旦您离开页面,浏览器是否不会清除所有DOM及其相关资源?

谢谢,

burak ozdogan

1 个答案:

答案 0 :(得分:1)

嘿,好问题。问题在于JavaScript对象和DOM节点之间的循环引用。

假设您有一个指向DOM节点的全局JavaScript对象,并且该节点具有返回该对象的expando属性。当页面卸载时,脚本引擎会“清空”JavaScript对象,因此它不再指向DOM节点。但是,它无法从内存中释放对象,因为它仍然存在对它的引用(来自DOM)。然后脚本引擎终止。

DOM上的Expando属性只是对其他对象的引用。在清理DOM时,它会破坏这些引用,但会假定仍在使用这些对象。在此示例中,DOM等待脚本引擎清理属于它的对象,但脚本引擎已经终止。

所以,问题是DOM只关注属于它的内存并假设脚本引擎也会这样做。

我希望这会有所帮助。

请参阅:http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx