Memandangkan nama fungsi js ialah penunjuk kepada objek fungsi, adakah ia merujuk kepada ingatan?
`
var a=function(c){
return ++c;
}
console.log(a(1));
var b=a;
console.log(b(1));
var a=null;
console.log(b);
console.log(b(1));
` , jadi bagaimana untuk melakukan pemusnahan manual? Adakah pembolehubah global perlu ditutup sebelum penyemak imbas dikitar semula? Terima kasih atas penyelesaiannya
Mula-mula,
var a
akan membuka ruang dalamtindanan
, dan kemudian anda menetapkannya kepadafungsi
, yang merupakan jenis rujukan, dan kemudian dalamheap
digunakan untuk ruang lain untuk menyimpanfunction
Pada masa ini,a
dalamstack
menyimpanThe alamat fungsi
var a
会在stack
里面开一块空间,然后你将他赋给一个function
,是一个引用类型,于是又在heap
里面又申请一块空间存放function
,此时,stack
里面的a
存放的是function
的地址而下面,将
b
赋值给a
,是将stack
里面a
指向的heap
里面function
的地址赋给b
,所以这就是为什么后来a
指向了null
,但是b
仍然指向之前heap
里面function
的原因。如何销毁?将
Dan di bawah, tetapkanb
也设置为null
b
kepadaa
, iaitutimbunana
dalamtindanan
Alamatfungsi
dalam /code> diberikan kepadab
, jadi inilah sebabnya kemudiana
menunjuk kenull
, tetapi Sebab mengapab
masih menunjuk kepadafungsi
dalamtimbunan
sebelumnya. 🎜 🎜Bagaimana untuk memusnahkan? Hanya tetapkanb
kepadanull
atau nilai lain. Jadi cuba untuk tidak menulis pembolehubah global untuk pembolehubah jenis ini, tulis pembolehubah tempatan. 🎜Adakah ia merujuk kepada ingatan? Soalan ini agak terlalu luas Data disimpan dalam ingatan, jadi ia adalah semulajadi untuk rujukan memori
Tetapi ia bukan semudah merujuk memori hanya bertanggungjawab untuk menyimpan data, dan hubungan antara data tidak dapat dicerminkan, jadi ia tidak secara langsung merujuk memori
Terdapat pemprosesan tersembunyi di tengah-tengah terdapat teori asas tentang cara mengendalikannya, tetapi sebenarnya hanya sedikit orang yang mengetahui butiran khusus tahap terlalu rendah
Selain itu, terdapat dua cara kitar semula:
Secara amnya, hanya gunakan kaedah 1. Jangan risau tentang limpahan Terdapat banyak pencetus untuk kitar semula automatik, seperti masa, seperti apabila data mencapai jumlah tertentu
.js boleh menggunakan padam untuk mengitar semula pembolehubah secara manual
Mengenai mekanisme pengumpulan sampah:
Di bawah versi lama IE, DOM adalah dalam bentuk objek COM dan dibersihkan menggunakan pengiraan rujukan Jika terdapat rujukan bulat, tidak akan ada peluang untuk melepaskan memori.
Dalam penyemak imbas standard, ia adalah kaedah pembersihan tanda Anda hanya perlu melepaskan rujukan secara manual dan menetapkannya kepada null untuk melepaskan memori.
Jika rujukan tidak dinyahrujuk, ingatan tidak akan dikeluarkan sehingga persekitaran pelaksanaan dikeluarkan, dan objek pembolehubah global tidak akan dikeluarkan sehingga persekitaran pelaksanaan global keluar, iaitu, ia tidak akan dikeluarkan sehingga penyemak imbas ditutup .