Heim  >  Artikel  >  Web-Frontend  >  Wie bleiben Variablenwerte bei der Übergabe von Argumenten an Funktionen innerhalb von Schleifen erhalten?

Wie bleiben Variablenwerte bei der Übergabe von Argumenten an Funktionen innerhalb von Schleifen erhalten?

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 22:00:30254Durchsuche

How to Preserve Variable Values When Passing Arguments to Functions Inside Loops?

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!

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