Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mengelakkan Masalah Penutupan Apabila Menggunakan For Loops dalam Pengendalian Acara JavaScript?

Bagaimanakah Saya Boleh Mengelakkan Masalah Penutupan Apabila Menggunakan For Loops dalam Pengendalian Acara JavaScript?

Linda Hamilton
Lepaskan: 2024-11-30 22:36:11
asal
235 orang telah melayarinya

How Can I Avoid Closure Problems When Using For Loops in JavaScript Event Handling?

Kesalahan Penutupan dalam Gelung Pengendalian Acara

Dalam JavaScript, adalah penting untuk mengambil kira skop dan penutupan semasa berurusan dengan gelung. Seperti yang ditunjukkan dalam senario yang dibentangkan, menetapkan pengendali klik dalam gelung menggunakan pembolehubah i tanpa pengkapsulan penutupan yang betul menghasilkan gelagat yang tidak dijangka.

Isu asas berpunca daripada fakta bahawa pembolehubah i yang diisytiharkan dalam gelung dikongsi merentas lelaran. Akibatnya, apabila mana-mana pengendali klik dicetuskan, nilai i telah meningkat kepada nilai tertinggi, yang membawa kepada mesej makluman yang salah.

Untuk menyelesaikan isu ini, satu pendekatan adalah dengan menggunakan fungsi panggil balik. Fungsi ini merangkumi pembolehubah i sebagai sebahagian daripada penutupannya, memastikan setiap pengendali klik beroperasi secara bebas:

function createCallback(i) {
  return function() {
    alert('you clicked ' + i);
  }
}

$(document).ready(function() {
  for (var i = 0; i < 20; i++) {
    $('#question' + i).click(createCallback(i));
  }
});
Salin selepas log masuk

Sebagai alternatif, jika menggunakan ES6, kata kunci let boleh digunakan untuk mencipta pembolehubah i berskop blok dalam setiap lelaran gelung:

for (let i = 0; i < 20; i++) {
  $('#question' + i).click(function() {
    alert('you clicked ' + i);
  });
}
Salin selepas log masuk

Dengan menangani masalah penutupan, pendekatan ini memastikan setiap klik pengendali memaparkan nilai i yang betul, mewakili elemen khusus yang telah diklik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Masalah Penutupan Apabila Menggunakan For Loops dalam Pengendalian Acara JavaScript?. 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