Rumah > hujung hadapan web > tutorial js > Apakah perbezaan antara penutupan JavaScript dan fungsi tanpa nama?

Apakah perbezaan antara penutupan JavaScript dan fungsi tanpa nama?

Barbara Streisand
Lepaskan: 2024-10-29 18:18:45
asal
790 orang telah melayarinya

What's the difference between JavaScript closures and anonymous functions?

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);
}
Salin selepas log masuk

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);
  })();
}
Salin selepas log masuk

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:

  • Mempunyai akses kepada pembolehubah dari skop luar (iaitu, bukan tempatan atau " pembolehubah bebas")
  • Dirujuk dari luar skop yang ditakrifkan dalam (iaitu, "tertutup" di sekeliling pembolehubah bebasnya)

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan