Rumah > hujung hadapan web > tutorial js > Mengapakah Pengendali Klik Berasaskan Gelung dalam JavaScript Kadangkala Memaparkan Nilai yang Tidak Dijangka?

Mengapakah Pengendali Klik Berasaskan Gelung dalam JavaScript Kadangkala Memaparkan Nilai yang Tidak Dijangka?

Patricia Arquette
Lepaskan: 2024-11-27 04:53:16
asal
982 orang telah melayarinya

Why Do Loop-Based Click Handlers in JavaScript Sometimes Display Unexpected Values?

Mengendalikan Peristiwa Klik dalam Gelung: Memahami Perangkap Penutupan

Apabila menugaskan pengendali klik kepada berbilang elemen dengan gelung, adalah penting untuk mengetahui mekanisme penutupan JavaScript. Kesilapan biasa ialah membuat penutupan dalam gelung tanpa menggunakan fungsi panggil balik. Ini boleh membawa kepada tingkah laku yang tidak dijangka.

Dalam coretan kod yang disediakan:

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

Tingkah laku yang dijangkakan ialah mengklik pada #mydiv3 akan memaparkan "anda mengklik 3." Walau bagaimanapun, kod itu salah menggunakan pembolehubah i, yang merupakan pembolehubah global dalam gelung. Akibatnya, pembolehubah i memegang nilai akhir 20, menyebabkan mesej makluman yang salah.

Cara yang betul untuk menetapkan pengendali klik dalam gelung ialah menggunakan fungsi panggil balik. Fungsi ini boleh mencipta skop baharu untuk pembolehubah i, memastikan setiap lelaran gelung mempunyai contoh i sendiri.

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

Satu lagi penyelesaian moden, jika menggunakan ES6, ialah menggunakan kata kunci let untuk cipta pembolehubah setempat untuk setiap lelaran gelung:

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

Pendekatan ini lebih bersih dan lebih mudah difahami. Ia memastikan bahawa setiap pengendali klik mempunyai pembolehubah i sendiri, menghapuskan perangkap penutupan dan memastikan gelagat yang betul apabila mengendalikan peristiwa klik dalam gelung.

Atas ialah kandungan terperinci Mengapakah Pengendali Klik Berasaskan Gelung dalam JavaScript Kadangkala Memaparkan Nilai yang Tidak Dijangka?. 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