在一篇文章中,我看到最好清除 window.unload 事件上的所有 expandos 以防止内存泄漏。
我不明白为什么要这样做。
无论如何,一旦您离开页面,浏览器是否不会清理所有 DOM 及其相关资源?
谢谢,
布拉克·奥兹多安
在一篇文章中,我看到最好清除 window.unload 事件上的所有 expandos 以防止内存泄漏。
我不明白为什么要这样做。
无论如何,一旦您离开页面,浏览器是否不会清理所有 DOM 及其相关资源?
谢谢,
布拉克·奥兹多安
嘿,好问题。问题在于 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