闭包会导致内存泄露,这让很多同学不敢使用闭包,做一个测试下面是在函数内部的闭包和闭包调用,出现了内存泄露的情况,但是在不同浏览器表现个不一样
FF:内存在执行完后回收
IE:部分版本会回收,IE9会有明显泄露,但是调用了CollectGarbage后有明显的回收效果
<div onclick="fLeak();">start</div><script type="text/javascript"><!--function fTest(){var aList = [];var nLength = 100000;for(var i=0;i<nLength;i++){var oDiv = document.createElement("DIV");aList.push(oDiv);document.body.appendChild(oDiv);}for(var i=0;i<nLength;i++){aList[i].parentNode.removeChild(aList[i],true);}//闭包,泄露?!return function(){alert(aList.length);}}function fLeak(){(fTest())();//IE下不加这句各个版本表现不一//IE8会自行回收,但是有部分泄露//IE9不会自行回收,连续运行会导致明显内存泄露try{setTimeout(function(){CollectGarbage()},1000);}catch(exp){}}//--></script>
总结如下:
1:闭包并不是洪水猛兽,只要在局部使用,注意调用后及时销毁,就不会出现内存泄露。
2:注意回收,没准CollectGarbage会有意想不到的收获。
没有评论:
发表评论