Rumah  >  Artikel  >  hujung hadapan web  >  Bilakah Fungsi Tanpa Nama Menjadi Penutupan dalam JavaScript?

Bilakah Fungsi Tanpa Nama Menjadi Penutupan dalam JavaScript?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 08:05:02971semak imbas

When Does an Anonymous Function Become a Closure in JavaScript?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn