Saya memodifikasi contoh orang lain dan menurut saya lebih kompak seperti ini! Untuk memparafrasekan kata-kata orang lain, ketika objek DOM berisi referensi ke objek Js (seperti Event Handler), dan objek Js ini menyimpan referensi ke objek DOM, referensi melingkar sudah cukup, jadi di bawah yaitu Terjadi kebocoran memori . Klik "Jalankan Kode" dan buka Task Manager untuk melihat perubahan memori. Diuji masing-masing di bawah ie8 dan ff, perbedaannya tidak perlu diragukan lagi.
menjalankan kode
Copy kode kodenya sebagai berikut:
<html>
<kepala>
<title>Kebocoran memori</title>
<gaya>
tubuh{
bantalan: 10 piksel;
}
</gaya>
</kepala>
<tubuh>
</tubuh>
<skrip>
var q = [];
var n = 0;
setInterval(fungsi(){
q.push(makeSpan());
if(q.panjang>=10){
var s = q.shift();
jika(s){
s.parentNode.removeChild(s);
}
}
n++;
},10);
fungsi makeSpan(){
var s = document.createElement("span");
document.body.appendChild(s);
var t=document.createTextNode("*** " + n + " ***");
s.appendChild(t);
s.onclick=fungsi(e){
s.style.backgroundColor="merah";
peringatan(n);
};
kembali;
};
</skrip>
</html>
Jadi bagaimana cara mengatasinya di bawah yaitu?
Saat menghapus sebuah node, hancurkan referensi melingkar secara manual dan ubah sedikit kode setInterval di dalamnya sebagai berikut:
Copy kode kodenya sebagai berikut:
setInterval(fungsi(){
q.push(makeSpan());
if(q.panjang>=10){
var s = q.shift();
jika(s){
s.onclick = null;//Kuncinya ada di sini
s.parentNode.removeChild(s);
}
}
n++;
},10);