原文: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
的引用
是从哪儿体现出来的呢,能不能给小弟分析一下,谢谢!
首先obj 引用 document.getElementById("element");
在document.getElementById("element").onclick 的作用域上面又引用了 外部函数的局部变量obj 。这个闭包就构成了一个循环引用。
非常感谢,原来是通过 onclick 体现的啊