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

JS 的循环引用, 原因是什么?

JS 的循环引用, 原因是什么?

aluckdog 2019-04-06 16:57:47
Mozilla文档上的例子,这个是在IE6,7里的,https://developer.mozilla.org/en-US/docs/JavaScript/Memory_Managementvardiv=document.createElement("div");div.onclick=function(){doSomething();};//Thedivhasareferencetotheeventhandlerviaits'onclick'property//Thehandleralsohasareferencetothedivsincethe'div'variablecanbeaccessedwithinthefunctionscope//Thiscyclewillcausebothobjectsnottobegarbage-collectedandthusamemoryleak.这里说的,函数里有一个对div的引用,可是在哪,是this么?在ChromeFirefox里是否有类似的内存泄漏问题?这是语言设计的失误么?
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

那几句英文大概是这个意思:
1.名叫div的变量有一个对handler的引用(因为handler是它的一个属性)
2.handler也同样有一个对div的引用(因为div处于它的作用域内。这是js闭包的特性,函数内的代码可以引用函数外的变量)
3.这就造成了循环引用,最后两个变量都不会被销毁,成了内存泄露
按照这个说法,像下面这样写代码就不会出现这种内存泄露了。
因为div变量不再处于handler函数的作用域之中。
varhandler=function(){dosomething();};
(function(){
vardiv=document.createElement("div");
div.onclick=handler;
})();
不过我也是猜想的,没怎么研究过内存泄露的问题。
                            
查看完整回答
反对 回复 2019-04-06
  • 2 回答
  • 0 关注
  • 611 浏览
慕课专栏
更多

添加回答

举报

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