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!