首页 新闻 会员 周边

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

0
[已解决问题] 解决于 2012-03-14 08:58

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

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

观海云不远的主页 观海云不远 | 初学一级 | 园豆:89
提问于:2012-03-13 16:01
< >
分享
最佳答案
0

首先obj 引用 document.getElementById("element");

在document.getElementById("element").onclick 的作用域上面又引用了 外部函数的局部变量obj 。这个闭包就构成了一个循环引用。

小小刀 | 小虾三级 |园豆:1991 | 2012-03-13 20:28

非常感谢,原来是通过 onclick 体现的啊

观海云不远 | 园豆:89 (初学一级) | 2012-03-14 08:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册