Heim  >  Artikel  >  Web-Frontend  >  ## So behalten Sie Variablenwerte in Ereignis-Listenern bei: Übergabe als Wert oder als Referenz?

## So behalten Sie Variablenwerte in Ereignis-Listenern bei: Übergabe als Wert oder als Referenz?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 03:27:29511Durchsuche

## How to Preserve Variable Values in Event Listeners: Pass by Value or by Reference?

Variablenwerte in Ereignis-Listenern beibehalten: Übergabe nach Wert oder nach Referenz

Beim Zuweisen von Variablen innerhalb einer Schleife und beim Hinzufügen von Ereignis-Listenern ist dies der Fall Es ist wichtig zu überlegen, ob Sie den Wert oder die Referenz der Variablen an den Listener übergeben möchten.

In Ihrem Fall ist ein Problem aufgetreten, bei dem jeder Listener zum Zeitpunkt von den Endwert von i anstelle des beabsichtigten Werts verwendet hat Listener-Erstellung. Dieses Problem entsteht, weil JavaScript das Heben von Variablen mit dem Schlüsselwort var verwendet, wobei Variablen an der Spitze ihres Gültigkeitsbereichs deklariert werden, was ihnen einen globalen Gültigkeitsbereich verleiht (auch wenn sie innerhalb eines Blocks deklariert werden).

Um dieses Problem zu beheben, können Sie Folgendes tun Verwenden Sie zwei Techniken:

Verwenden von Block-Scoping mit let oder const:

In modernen Browsern können Sie die Schlüsselwörter let oder const verwenden, um blockbezogene Variablen zu erstellen. Dadurch wird sichergestellt, dass Variablen innerhalb ihres enthaltenden Blocks deklariert werden und außerhalb davon nicht darauf zugegriffen werden kann.

for (let i = 0; i < results.length; i++) {
  let marker = results[i];
  google.maps.event.addListener(marker, 'click', () => change_selection(i));
}

Abschlüsse mit anonymen Funktionen erstellen:

In älteren Browsern ist dies der Fall Blockbezogene Variablen nicht unterstützen, können Sie einen Abschluss erstellen, um den aktuellen Wert von i für jede Iteration beizubehalten. Dazu gehört, die Erstellung des Ereignis-Listeners in eine anonyme Funktion zu packen und i als Parameter zu übergeben:

for (var i = 0; i < results.length; i++) {
  (function (i) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() {
      change_selection(i);
    });
  })(i);
}

Indem Sie i als erstes Argument an die anonyme Funktion übergeben, übergeben Sie effektiv den Wert von i an der Zeitpunkt des Funktionsaufrufs an den Listener.

Das obige ist der detaillierte Inhalt von## So behalten Sie Variablenwerte in Ereignis-Listenern bei: Übergabe als Wert oder als Referenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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