Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengelakkan Isu Penutupan Apabila Menggunakan Pendengar Acara dalam Gelung?

Bagaimana untuk Mengelakkan Isu Penutupan Apabila Menggunakan Pendengar Acara dalam Gelung?

Susan Sarandon
Susan Sarandonasal
2024-11-21 16:32:11830semak imbas

How to Avoid Closure Issues When Using Event Listeners in a Loop?

Mengelakkan Isu Penutupan Apabila Menggunakan Pendengar Acara dalam Gelung

Dalam percubaan anda untuk melampirkan pendengar acara pada berbilang elemen menggunakan gelung for, anda telah menghadapi isu di mana semua pendengar akhirnya menyasarkan objek terakhir. Ini disebabkan oleh cara penutupan berfungsi dalam JavaScript.

Memahami Penutupan

Apabila fungsi merujuk kepada pembolehubah yang diisytiharkan di luar skopnya, ia mengekalkan akses kepada pembolehubah itu walaupun selepas fungsi keluar. Dalam kes anda, fungsi pendengar acara ditakrifkan dalam kotak rujukan gelung dan boxb, yang ditakrifkan di luar gelung. Apabila gelung selesai, pembolehubah ini menghala ke elemen terakhir dalam gelung.

Membetulkan Isu

Untuk mengelakkan isu penutupan ini, anda boleh menggunakan fungsi yang digunakan serta-merta ungkapan (IIFE) di dalam gelung. IIFE mencipta skop baharu, jadi pembolehubah yang diisytiharkan di dalamnya tidak boleh diakses di luar fungsi.

Kod Disemak

Berikut ialah kod yang disemak dengan IIFE sedia ada:

// Function to run on click:
function makeItHappen(elem, elem2) {
  var el = document.getElementById(elem);
  el.style.backgroundColor = "red";
  var el2 = document.getElementById(elem2);
  el2.style.backgroundColor = "blue";
}

// Autoloading function to add the listeners:
var elem = document.getElementsByClassName("triggerClass");

for (var i = 0; i < elem.length; i += 2) {
  (function () {
    var k = i + 1;
    var boxa = elem[i].parentNode.id;
    var boxb = elem[k].parentNode.id;
    elem[i].addEventListener("click", function() {
      makeItHappen(boxa, boxb);
    }, false);
    elem[k].addEventListener("click", function() {
      makeItHappen(boxb, boxa);
    }, false);
  }()); // immediate invocation
}

Dengan menggunakan IIFE, anda memastikan bahawa setiap fungsi pendengar acara mempunyai skopnya sendiri, menghalang isu penutupan. Kini, setiap pendengar acara akan menyasarkan elemen yang sepadan dengan betul dalam gelung.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Penutupan Apabila Menggunakan Pendengar Acara dalam Gelung?. 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