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

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

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

四季花海 2019-04-07 09:38:00
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里是否有类似的内存泄漏问题?这是语言设计的失误么?
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超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-07
  • 1 回答
  • 0 关注
  • 343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号