原文:http://www.ibm.com/developerworks/cn/web/wa-memleak/#N10156
代码如下:
<html> <body> <script type="text/javascript"> document.write("Program to illustrate memory leak via closure"); window.onload=function outerFunction(){ var obj = document.getElementById("element"); obj.onclick=function innerFunction(){ alert("Hi! I will leak"); }; obj.bigString=new Array(1000).join(new Array(2000).join("XXXXX")); // This is used to make the leak significant }; </script> <button id="element">Click Me</button> </body> </html>
可以看到一个闭包,在此闭包内,JavaScript 对象(obj)包含到 DOM 对象的引用(通过 id "element" 被引用)。而 DOM 元素则拥有到 JavaScript obj 的引用。这样建立起来的 JavaScript 对象和 DOM 对象间的循环引用将会导致内存泄漏。
这里说 JavaScript对象包含到DOM对象的引用是通过
var obj = document.getElementById("element");
体现出来的,那么后面说
而 DOM 元素则拥有到 JavaScript obj 的引用
是从哪儿体现出来的呢,能不能给小弟分析一下,谢谢!
1 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
首先obj 引用 document.getElementById("element");
在document.getElementById("element").onclick 的作用域上面又引用了 外部函数的局部变量obj 。这个闭包就构成了一个循环引用。
添加回答
举报
0/150
提交
取消