2

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

我不明白为什么要这样做。

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

谢谢,

布拉克·奥兹多安

4

1 回答 1

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

于 2010-05-07T04:58:01.210 回答