为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2018-12-07 05:32:11
原文: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 。这个闭包就构成了一个循环引用。

查看完整回答
反对 回复 2018-12-24
  • 1 回答
  • 0 关注
  • 477 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信