Rumah >hujung hadapan web >tutorial js >Apakah perbezaan antara penutupan JavaScript dan fungsi tanpa nama?
Penutupan JavaScript dan Fungsi Tanpa Nama
Penutupan ialah konsep penting dalam JavaScript, membolehkan fungsi mengakses pembolehubah daripada skop tertutupnya, walaupun selepas fungsi dipanggil. Walau bagaimanapun, adalah penting untuk membezakan antara penutupan dan fungsi tanpa nama.
Pertimbangkan contoh biasa: menggunakan gelung dan setTimeout untuk melambatkan pengelogan pembolehubah balas. Tanpa menggunakan penutupan, kod akan mencetak nilai akhir beberapa kali.
Penggunaan Penutupan yang Salah:
for (var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); // This incorrectly prints 10 for each iteration }, 1000); }
Masalahnya di sini ialah fungsi tanpa nama tidak tangkap nilai i untuk setiap lelaran. Sebaliknya, ia menangkap rujukan kepada i dalam skop global, yang akhirnya mencapai nilai akhir 10.
Penggunaan Penutupan Betul:
for (var i = 0; i < 10; i++) { (function() { var i2 = i; setTimeout(function() { console.log(i2); // This correctly prints 0 to 9 with delay }, 1000); })(); }
Dalam kes ini , fungsi tanpa nama mencipta pembolehubah baharu i2, yang dimulakan dengan nilai semasa i. Fungsi tanpa nama dalaman kemudiannya menangkap nilai i2 dan menggunakannya untuk pengelogan, dengan itu mengekalkan nilai daripada lelaran asal.
Membezakan Antara Penutupan dan Fungsi Tanpa Nama:
Walaupun semua fungsi dalam JavaScript secara teknikal "menutup" pembolehubahnya, istilah "penutupan" biasanya dikhaskan untuk fungsi yang:
Dalam contoh pertama, fungsi tanpa nama ' t memenuhi kriteria ini kerana ia tidak menangkap pembolehubah i. Dalam contoh kedua, fungsi tanpa nama memenuhi syarat ini dan oleh itu dianggap sebagai penutupan.
Kesimpulan:
Memahami perbezaan antara penutupan dan fungsi tanpa nama adalah penting untuk menggunakan kuasa JavaScript dengan berkesan. Penutupan membenarkan fungsi berinteraksi dengan skop lampirannya, menyediakan enkapsulasi dan membolehkan akses tertunda kepada pembolehubah, yang amat bermanfaat untuk operasi tak segerak dan pengendalian acara.
Atas ialah kandungan terperinci Apakah perbezaan antara penutupan JavaScript dan fungsi tanpa nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!