猿问

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

Mozilla文档上的例子,这个是在IE6,7里的,
https://developer.mozilla.org/en-US/docs/JavaScript/Memory_Management
vardiv=document.createElement("div");
div.onclick=function(){
doSomething();
};//Thedivhasareferencetotheeventhandlerviaits'onclick'property
//Thehandleralsohasareferencetothedivsincethe'div'variablecanbeaccessedwithinthefunctionscope
//Thiscyclewillcausebothobjectsnottobegarbage-collectedandthusamemoryleak.
这里说的,函数里有一个对div的引用,可是在哪,是this么?
在ChromeFirefox里是否有类似的内存泄漏问题?
这是语言设计的失误么?
aluckdog
浏览 612回答 2
2回答

慕标琳琳

那几句英文大概是这个意思:1.名叫div的变量有一个对handler的引用(因为handler是它的一个属性)2.handler也同样有一个对div的引用(因为div处于它的作用域内。这是js闭包的特性,函数内的代码可以引用函数外的变量)3.这就造成了循环引用,最后两个变量都不会被销毁,成了内存泄露按照这个说法,像下面这样写代码就不会出现这种内存泄露了。因为div变量不再处于handler函数的作用域之中。varhandler=function(){dosomething();};(function(){vardiv=document.createElement("div");div.onclick=handler;})();不过我也是猜想的,没怎么研究过内存泄露的问题。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答