为什么说这段JavaScript代码存在循环引用

原文: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 的引用

是从哪儿体现出来的呢,能不能给小弟分析一下,谢谢!

波斯汪
浏览 480回答 1
1回答

月关宝盒

首先obj 引用 document.getElementById("element"); 在document.getElementById("element").onclick 的作用域上面又引用了 外部函数的局部变量obj 。这个闭包就构成了一个循环引用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript