Heim > Web-Frontend > js-Tutorial > Warum zeigen schleifenbasierte Click-Handler in JavaScript manchmal unerwartete Werte an?

Warum zeigen schleifenbasierte Click-Handler in JavaScript manchmal unerwartete Werte an?

Patricia Arquette
Freigeben: 2024-11-27 04:53:16
Original
980 Leute haben es durchsucht

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

Klick-Ereignisse in einer Schleife verarbeiten: Fallstricke bei Schließungen verstehen

Beim Zuweisen von Klick-Handlern zu mehreren Elementen mit einer Schleife ist es wichtig, sich dessen bewusst zu sein des JavaScript-Abschlussmechanismus. Ein häufiger Fehler besteht darin, Abschlüsse in einer Schleife zu erstellen, ohne Callback-Funktionen zu verwenden. Dies kann zu unerwartetem Verhalten führen.

Im bereitgestellten Codeausschnitt:

$(document).ready(function(){
  for(var i = 0; i < 20; i++) {
    $('#question' + i).click( function(){
      alert('you clicked ' + i);
    });
  }
});
Nach dem Login kopieren

Das erwartete Verhalten besteht darin, dass beim Klicken auf #mydiv3 „Sie haben auf 3 geklickt“ angezeigt wird. Allerdings verwendet der Code fälschlicherweise die Variable i, die eine globale Variable in der Schleife ist. Infolgedessen enthält die i-Variable den Endwert 20, was zu einer falschen Warnmeldung führt.

Der richtige Weg, Klickhandler in einer Schleife zuzuweisen, ist die Verwendung von Rückruffunktionen. Diese Funktionen können einen neuen Bereich für die i-Variable erstellen und so sicherstellen, dass jede Iteration der Schleife ihre eigene Instanz von i hat.

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

$(document).ready(function(){
  for(var i = 0; i < 20; i++) {
    $('#question' + i).click(createCallback(i));
  }
});
Nach dem Login kopieren

Eine andere moderne Lösung besteht bei Verwendung von ES6 darin, das Schlüsselwort let zu verwenden Erstellen Sie für jede Iteration der Schleife eine lokale Variable:

for(let i = 0; i < 20; i++) {
  $('#question' + i).click( function(){
    alert('you clicked ' + i);
  });
}
Nach dem Login kopieren

Dieser Ansatz ist sauberer und leichter zu verstehen. Es stellt sicher, dass jeder Klick-Handler über eine eigene i-Variable verfügt, wodurch Fallstricke beim Schließen beseitigt werden und das korrekte Verhalten bei der Verarbeitung von Klickereignissen in einer Schleife sichergestellt wird.

Das obige ist der detaillierte Inhalt vonWarum zeigen schleifenbasierte Click-Handler in JavaScript manchmal unerwartete Werte an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage