日期:2014-05-16  浏览次数:20484 次

Javascript 内存泄漏
请问为什么会内存泄漏?

<script> 
document.onclick=function(){};  
document.getElementById("a").doc=document;
</script>

------解决方案--------------------
document.getElementById("a").doc=document;
document被引用后没有没有被浏览器回收
------解决方案--------------------
"These memory leaks often occur as a result of circular references between JavaScript objects and objects within IE’s DOM (document object model)." GPDE Team Blog

<script>
document.onclick=function(){}; //dom reference the javascript object
document.getElementById("a").doc=document; //dom reference dom
</script>

按照GPDE TEAM的说法,上面两句应该不会造成泄漏。
------解决方案--------------------
和winter讨论了一下,document.onclick=function(){}这句确实产生了循环引用!请参见:

如何避免Javascript事件绑定出现内存泄漏 http://www.w3cgroup.com/article.asp?id=207
------解决方案--------------------
典型的“循环引用”。

脚本引擎对象会维持对DOM对象的引用,并在清理和释放DOM对象指针前等待所有引用的移除。

解决办法:在页面关闭前document.getElementById("a").doc = null;取消document的引用。