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

DDD
Lepaskan: 2024-10-28 05:44:30
asal
289 orang telah melayarinya

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!