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;})();不过我也是猜想的,没怎么研究过内存泄露的问题。
添加回答
举报
0/150
提交
取消