Penutupan JavaScript lwn. Fungsi Tanpa Nama
Fungsi tanpa nama, ciri biasa dalam JavaScript, sering timbul dalam perbincangan mengenai penutupan. Walau bagaimanapun, tidak semua fungsi tanpa nama layak sebagai penutupan sebenar.
Mentakrifkan Penutupan
Penutupan dalam JavaScript ialah jenis khas fungsi tanpa nama yang mengekalkan akses kepada skop leksikal dalam yang ia dicipta, walaupun selepas skop luar telah tamat. Ciri ini membenarkan penutupan untuk "menangkap" nilai pembolehubah dari skop luar, menghalangnya daripada menjadi sampah dikumpul.
Kajian Kes: Menutup Pembolehubah
Dalam contoh kod yang diberikan, kedua-dua penyelesaian menggunakan fungsi tanpa nama untuk menangguhkan pencetakan pemboleh ubah pembilang i.
Percubaan Rakan
Kod dalam contoh pertama nampaknya menangkap i berubah dalam penutupan. Walau bagaimanapun, ia tidak memenuhi definisi penutupan kerana fungsi tanpa nama dalaman g tidak mewarisi skop leksikal fungsi luar f. Oleh itu, saya sebenarnya tidak "tertutup."
<code class="javascript">for(var i = 0; i < 10; i++) { (function(){ var i2 = i; setTimeout(function(){ console.log(i2); }, 1000) })(); }</code>
Percubaan Editor
Contoh kod kedua benar-benar mencipta penutupan. Fungsi tanpa nama yang dikembalikan oleh fungsi luar f menangkap pembolehubah i2 dan mengekalkan nilainya dalam skop leksikal penutupan. Penutupan ini kemudiannya dipanggil dalam panggilan balik setTimeout, memastikan bahawa nilai asal pembolehubah i diakses.
<code class="javascript">for(var i = 0; i < 10; i++) { setTimeout((function(i2){ return function() { console.log(i2); } })(i), 1000); }</code>
Kesimpulan
Dalam kod yang disediakan, penyelesaian editor menunjukkan penggunaan penutupan yang betul untuk menangkap nilai pembolehubah i. Walaupun kedua-dua penyelesaian berkesan menyelesaikan isu pencetakan tertangguh, hanya penyelesaian editor yang layak sebagai penutupan dari segi teknikal.
Atas ialah kandungan terperinci Bilakah Fungsi Tanpa Nama Menjadi Penutupan dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!