Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Pengendali Acara dalam Gelung JavaScript Merujuk kepada Pembolehubah Yang Sama?

Mengapa Pengendali Acara dalam Gelung JavaScript Merujuk kepada Pembolehubah Yang Sama?

DDD
DDDasal
2024-11-05 20:36:02622semak imbas

Why Do Event Handlers in JavaScript Loops Refer to the Same Variables?

Bekerja dengan Pengendali Acara dalam Gelung JavaScript: Menggunakan Penutupan untuk Pengendalian Acara yang Berbeza

Dalam JavaScript, apabila bekerja dengan kod HTML, pengendali acara bermain peranan penting dalam membolehkan interaksi pengguna dengan halaman web. Walau bagaimanapun, cabaran biasa timbul apabila pengendali acara ini ditakrifkan dalam gelung, yang membawa kepada gelagat yang tidak dijangka.

Untuk menggambarkan isu ini, pertimbangkan coretan kod berikut:

<code class="javascript">var blah = xmlres.getElementsByTagName('blah');
for(var i = 0; i < blah.length; i++) {
    var td = document.createElement('td');
    var select = document.createElement('select');
    select.setAttribute("...", "...");
    select.onchange = function() {
        onStatusChanged(select, callid, anotherid);
    };
    td.appendChild(select);
}

Apabila berlaku perubahan peristiwa dicetuskan untuk elemen, bukti empirikal menunjukkan bahawa nilai yang sama dihantar kepada kaedah onStatusChanged(), tanpa mengira