Heim > Web-Frontend > js-Tutorial > Hauptteil

So behalten Sie Variablenwerte in JavaScript-Ereignis-Listenern bei: Blockbezogene Variablen oder Abschlüsse?

Linda Hamilton
Freigeben: 2024-10-28 08:05:29
Original
378 Leute haben es durchsucht

How to Preserve Variable Values in JavaScript Event Listeners: Block-Scoped Variables or Closures?

So behalten Sie Variablenwerte in Ereignis-Listenern in JavaScript bei

Bedenken Sie den folgenden Codeausschnitt:

<code class="javascript">for (var i = 0; i < results.length; i++) {
  marker = results[i];
  google.maps.event.addListener(marker, 'click', function() {
    change_selection(i);
  });
}
Nach dem Login kopieren

In In diesem Code ist der im Ereignis-Listener verwendete Wert von i immer der Endwert von results.length nach Beendigung der Schleife. Um dieses Problem zu lösen, müssen wir den Wert von i während seiner Erstellung an den Ereignis-Listener übergeben.

Verwenden von Variablen mit Blockbereich (ES6 und höher)

In In modernen Browsern können wir blockbezogene Variablen wie let oder const verwenden. Auf diese Variablen kann nur innerhalb des Blocks zugegriffen werden, in dem sie definiert sind. Durch die Verwendung einer blockbezogenen Variablen können wir sicherstellen, dass der Wert von i zum Zeitpunkt der Ereigniserstellung erhalten bleibt.

<code class="javascript">for (let i = 0; i < results.length; i++) {
  let marker = results[i];
  google.maps.event.addListener(marker, 'click', () => change_selection(i));
}</code>
Nach dem Login kopieren

Erstellen eines Abschlusses (ältere Browser)

In älteren Browsern, die keine blockbezogenen Variablen unterstützen, können wir einen Abschluss erstellen, um den Wert von i beizubehalten. Ein Abschluss ist eine Funktion, die eine andere Funktion kapselt und so einen verschachtelten Bereich erstellt. Indem wir i als erstes Argument an eine anonyme Funktion übergeben, können wir einen Abschluss erstellen, der den Wert von i beibehält.

<code class="javascript">for (var i = 0; i < results.length; i++) {
  (function (i) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() {
      change_selection(i);
    });
  })(i);
}</code>
Nach dem Login kopieren

Durch die Verwendung entweder der blockbezogenen Variablen oder der Abschlusstechnik können wir dies sicherstellen Jeder Ereignis-Listener verwendet den beabsichtigten Wert von i.

Das obige ist der detaillierte Inhalt vonSo behalten Sie Variablenwerte in JavaScript-Ereignis-Listenern bei: Blockbezogene Variablen oder Abschlüsse?. 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