Variablenwerte bei der Übergabe von Argumenten an Funktionen beibehalten
Bei der Arbeit mit JavaScript-Schleifen kann es vorkommen, dass Sie den Wert von beibehalten müssen eine Variable, wenn sie an eine Funktion übergeben wird. Dieses Szenario entsteht, wenn sich der Wert der Variablen während der Schleifenausführung ändern kann, was zu unerwartetem Verhalten in Ereignis-Listenern führt.
Betrachten Sie das folgende Beispiel:
<code class="js">for (var i = 0; i < results.length; i++) { marker = results[i]; google.maps.event.addListener(marker, 'click', function() { change_selection(i); }); }
In diesem Code ist der Ereignis-Listener an jeder Markierung innerhalb der Schleife befestigt. Wenn der Listener jedoch ausgelöst wird, verwendet er den Endwert von i, der der Länge des Ergebnisarrays entspricht, wenn die Schleife endet. Dieses Verhalten ist unerwünscht, da es dazu führt, dass für alle Ereignis-Listener derselbe Wert verwendet wird.
Um den Wert von i für jeden Listener beizubehalten, können Sie blockbezogene Variablen (in modernen Browsern) oder Abschlüsse (in ältere Browser).
Moderne Browser (ES6):
<code class="js">for (let i = 0; i < results.length; i++) { let marker = results[i]; google.maps.event.addListener(marker, 'click', () => change_selection(i)); }</code>
Durch die Verwendung des Schlüsselworts let wird eine Variable mit Blockbereich erstellt, auf die nur innerhalb der Schleife zugegriffen werden kann. Dadurch wird sichergestellt, dass jeder Ereignis-Listener zum Zeitpunkt der Erstellung über eine eigene Kopie des i-Werts verfügt.
Ältere Browser:
<code class="js">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>
Anonyme Funktion erstellen und aufrufen es mit i als erstem Argument erstellt einen Abschluss. Die Funktion behält den Wert von i zum Zeitpunkt ihrer Erstellung bei und stellt so sicher, dass jeder Ereignis-Listener den richtigen Wert für seinen spezifischen Marker verwendet.
Das obige ist der detaillierte Inhalt vonWie bleiben Variablenwerte bei der Übergabe von Argumenten an Funktionen innerhalb von Schleifen erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!