關(guān)于js內(nèi)存泄露的一個(gè)好例子
我把別人的例子改了一下,覺得這樣寫更緊湊!套用別人的原話,當(dāng)一個(gè)DOM對象包含一個(gè)Js對象的引用(例如一個(gè)Event Handler), 而這個(gè)Js對象又持有對這個(gè)DOM對象的引用時(shí),一個(gè)環(huán)狀引用就行成了,于是在ie下就出現(xiàn)了內(nèi)存泄露。點(diǎn)擊“運(yùn)行代碼”并打開任務(wù)管理器看內(nèi)存變化。分別在ie8和ff下測試,差距不用多說。
運(yùn)行代碼
<html>
<head>
<title>Memory leak</title>
<style>
body{
padding: 10px;
}
</style>
</head>
<body>
</body>
<script>
var q = [];
var n = 0;
setInterval(function(){
q.push(makeSpan());
if(q.length>=10){
var s = q.shift();
if(s){
s.parentNode.removeChild(s);
}
}
n++;
},10);
function makeSpan(){
var s = document.createElement("span");
document.body.appendChild(s);
var t=document.createTextNode("*** " + n + " ***");
s.appendChild(t);
s.onclick=function(e){
s.style.backgroundColor="red";
alert(n);
};
return s;
};
</script>
</html>
那么在ie下該怎么解決呢?
在刪除節(jié)點(diǎn)的時(shí)候,手動破除環(huán)狀引用,把里面setInterval那段代碼稍微改動以下:
setInterval(function(){
q.push(makeSpan());
if(q.length>=10){
var s = q.shift();
if(s){
s.onclick = null;//關(guān)鍵在這里
s.parentNode.removeChild(s);
}
}
n++;
},10);
- 解決JS內(nèi)存泄露之js對象和dom對象互相引用問題
- JS閉包、作用域鏈、垃圾回收、內(nèi)存泄露相關(guān)知識小結(jié)
- 解決js函數(shù)閉包內(nèi)存泄露問題的辦法
- 淺談js 閉包引起的內(nèi)存泄露問題
- JavaScript避免內(nèi)存泄露及內(nèi)存管理技巧
- 容易造成JavaScript內(nèi)存泄露幾個(gè)方面
- js內(nèi)存泄露的幾種情況詳細(xì)探討
- Javascript 閉包引起的IE內(nèi)存泄露分析
- 權(quán)威JavaScript 中的內(nèi)存泄露模式
- 總結(jié)JavaScript在IE9之前版本中內(nèi)存泄露問題
相關(guān)文章
JavaScript中各種二進(jìn)制對象關(guān)系的深入講解
JavaScript中用于表示二進(jìn)制對象有,Blob對象、和 ArrayBuffer 對象,這篇文章主要給大家介紹了關(guān)于JavaScript中各種二進(jìn)制對象關(guān)系的相關(guān)資料,需要的朋友可以參考下2021-09-09Bootstrap基本組件學(xué)習(xí)筆記之input輸入框組(9)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本組件學(xué)習(xí)筆記之input輸入框組,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12BootStrap學(xué)習(xí)系列之布局組件(下拉,按鈕組[toolbar],上拉)
這篇文章主要介紹了BootStrap學(xué)習(xí)系列之布局組件(下拉,按鈕組[toolbar],上拉)的相關(guān)資料,需要的朋友可以參考下2017-01-01JS求1到任意數(shù)之間的所有質(zhì)數(shù)的方法詳解
這篇文章主要介紹了JS求1到任意數(shù)之間的所有質(zhì)數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05關(guān)于webpack2和模塊打包的新手指南(小結(jié))
本篇文章主要介紹了關(guān)于webpack2和模塊打包的新手指南(小結(jié)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-08-08js實(shí)現(xiàn)瀏覽器窗口大小被改變時(shí)觸發(fā)事件的方法
這篇文章主要介紹了js實(shí)現(xiàn)瀏覽器窗口大小被改變時(shí)觸發(fā)事件的方法,實(shí)例分析了window.onresize方法的使用技巧,需要的朋友可以參考下2015-02-02