var user = { name: 'tom', age: 20, gender: 'male' }
var test = document.getElementById('test');
test.onclick = function() {
test.innerHTML = user.name;
}
user = null; // 释放对象
Saya menghadapi soalan temu bual seperti ini baru-baru ini Adakah terdapat kebocoran ingatan dalam perenggan ini, bolehkah seseorang menunjukkan sebabnya dan bagaimana untuk menghapuskan kebocoran memori
Memori bocorRingkasnya, memori yang diperuntukkan tidak boleh digunakan atau dikitar semula sehingga proses pelayar tamat.
Untuk masalah rujukan pekelilinghanya hapuskan rujukan terus, tetapkan
test=null
,因为js
mekanisme kutipan sampah untuk dilaksanakan secara berkala, cari pembolehubah yang tidak lagi digunakan, dan kemudian lepaskan memori yang diduduki oleh mereka.. Kutipan sampah
Prinsipnya adalah seperti yang ditunjukkan dalam gambar di bawah Ujian anda adalah elem dalam gambar Ia merujuk kepada elemen dom dan menambah pengendali acara kepada elemen dom Walau bagaimanapun, fungsi pemprosesan acara merujuk kepada ujian dalam skop luaran. jadi seperti berikut: Ia menjadi rujukan bulat.
Kebocoran memori sebenarnya adalah ujian dan bukannya pengguna Membersihkan rujukan kepada ujian luaran boleh memusnahkan rujukan pekeliling ini.
Malah, ini tidak akan menjadi masalah dalam pelayar moden kerana penggunaan algoritma tanda dan sapu Dalam pelayar lama, algoritma pengumpulan sampah hanya akan menyebabkan kebocoran memori disebabkan rujukan, iaitu rujukan bulat akan menyebabkan objek. menjadi tidak tersedia dan masih tidak boleh menjadi sampah.
Apakah itu kebocoran ingatan?
Ini akan menyebabkan ralat pelaksanaan. . . . . .
Sudah pasti, ia termasuk dalam soalan temuduga CVTE. Oleh kerana rujukan kepada nama pengguna dikekalkan dalam acara klik, ia masih akan dibocorkan.
Mengenai cara untuk menghapuskan masalah, satu-satunya perkara yang saya boleh fikirkan ialah dengan tidak merujuk secara langsung seperti yang dinyatakan di atas