Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Penutupan dalam Gelung Menyebabkan Kekeliruan, dan Bagaimana Kami Boleh Menyelesaikannya?

Mengapa Penutupan dalam Gelung Menyebabkan Kekeliruan, dan Bagaimana Kami Boleh Menyelesaikannya?

DDD
DDDasal
2024-10-28 05:44:30290semak imbas

 Why Do Closures in Loops Cause Confusion, and How Can We Solve It?

Memahami Penutupan JavaScript dalam Gelung

Masalahnya:
Dalam kod yang disediakan, penggunaan penutupan dalam satu gelung kelihatan mengelirukan. Khususnya, kejadian i dalam kurungan berganda telah menyebabkan kesukaran untuk memahami.

Penyelesaian: Kilang Fungsi

Untuk menangani isu ini, teknik yang dipanggil kilang fungsi boleh diambil bekerja. Daripada memberikan fungsi secara langsung kepada pengendali acara, kami boleh menggunakan kilang fungsi untuk menjana rujukan fungsi yang diingini.

Contoh Kod:

<code class="javascript">function generateMyHandler(x) {
  return function() {
    alert(x);
  };
}

for (var i = 0; i < 10; i++) {
  document.getElementById(i).onclick = generateMyHandler(i);
}</code>

Penjelasan:

Dalam kod ini, kami mencipta kilang fungsi bernama generateMyHandler yang mengambil parameter x. Kilang ini mengembalikan fungsi yang memberi amaran kepada nilai x. Dalam gelung, kami menggunakan generateMyHandler untuk setiap i dan menetapkan fungsi yang dikembalikan kepada pengendali acara.

Cara ia Menyelesaikan Masalah:

Menggunakan kilang fungsi membolehkan kami untuk mengasingkan penciptaan penutupan. Dengan memberikan i sebagai hujah kepada fungsi kilang, kami menangkap rujukan unik kepada i. Ini memastikan bahawa setiap penutupan mengekalkan contoh pembolehubahnya sendiri, menghapuskan isu pembolehubah yang dikongsi.

Kesimpulan:

Dengan menggunakan kilang fungsi, kami boleh menggunakan dengan berkesan penutupan dalam gelung tanpa menghadapi konflik atau kekeliruan. Teknik ini membantu memudahkan kod dan meningkatkan pemahaman kami tentang cara penutupan beroperasi dalam gelung acara JavaScript.

Atas ialah kandungan terperinci Mengapa Penutupan dalam Gelung Menyebabkan Kekeliruan, dan Bagaimana Kami Boleh Menyelesaikannya?. 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