Rumah > Artikel > hujung hadapan web > Adakah Fungsi Tanpa Nama Sentiasa Ditutup dalam JavaScript?
Penutupan JavaScript telah menjadi subjek kekeliruan bagi sesetengah pembangun. Walaupun semua fungsi JavaScript adalah penutupan, subset tertentu adalah kepentingan teori tertentu. Artikel ini bertujuan untuk menjelaskan konsep dan menentukan mana antara dua blok kod yang menggunakan penutupan dengan tepat.
Memahami Penutupan:
Penutupan ialah fungsi yang menangkap dan mengekalkan akses kepada pembolehubah daripada skop yang disertakan, walaupun selepas skop itu tidak lagi aktif. Pada dasarnya, penutupan ialah fungsi yang mempunyai memori dan boleh mengakses data daripada skop induknya, dikenali sebagai "pembolehubah skop induk" atau "nilai atas."
Mengenalpasti Penutupan:
Untuk menentukan sama ada fungsi ialah penutupan, kita mesti memeriksa pembolehubahnya. Fungsi yang tidak mempunyai pembolehubah bukan setempat (iaitu, pembolehubah bebas bebas) tidak boleh menjadi penutup. Fungsi dengan pembolehubah bukan setempat mesti dirujuk dari luar skop induknya untuk menjadi penutup.
Kes 1: Program Rakan
<code class="javascript">for(var i = 0; i < 10; i++) { (function(){ var i2 = i; setTimeout(function(){ console.log(i2); }, 1000) })(); }</code>
Dalam kes ini, fungsi tidak mempunyai sebarang pembolehubah skop induk tertutup dan oleh itu bukan penutupan. Walau bagaimanapun, fungsi dalaman yang dihantar ke setTimeout ialah penutupan kerana ia menangkap dan mengekalkan akses kepada pembolehubah bebas i2.
Kes 2: Program Pengarang
<code class="javascript">for(var i = 0; i < 10; i++) { setTimeout((function(i2){ return function() { console.log(i2); } })(i), 1000); }</code>
Di sini , fungsi dalaman mengekalkan akses kepada pembolehubah bebas i2 dan kekal sebagai penutupan walaupun dirujuk di luar skop induknya.
Kesimpulan:
Dalam kedua-dua kes, penutupan digunakan . Program pengarang menggunakan penutupan untuk menangkap nilai i. Dengan mengembalikan fungsi lain dan menghantarnya ke setTimeout, fungsi dalaman boleh mengakses pembolehubah tertutup i2. Ini memastikan bahawa nilai yang betul dicetak ke konsol selepas kelewatan.
Atas ialah kandungan terperinci Adakah Fungsi Tanpa Nama Sentiasa Ditutup dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!