Zugriff auf externe Variablen in der Schleife durch JavaScript-Abschluss
Das Problem tritt auf, wenn auf Variablen zugegriffen wird, die innerhalb einer Schleife deklariert werden, insbesondere wenn auf solche Variablen später verwiesen wird in einem asynchronen Rückruf. Betrachten Sie zur Veranschaulichung den folgenden Codeausschnitt:
<code class="javascript">for (var i in this.items) { var item = this.items[i]; // ... }</code>
In diesem Fall ändert sich die Elementvariable mit jeder Schleifeniteration. Wenn später auf ein Element verwiesen wird, enthält es den Wert des letzten Elements im Array.
Lösung: Verwendung von Abschlüssen
Eine Lösung für dieses Problem besteht darin, Abschlüsse zu verwenden. die Funktionen erstellen, die andere Funktionen zurückgeben. Durch die Verwendung von Abschlüssen kann der Gültigkeitsbereich der Elementvariablen unterschiedlich sein, wie unten dargestellt:
<code class="javascript">for (var i in this.items) { var item = this.items[i]; // ... $("#showcasebutton_"+item.id).click( (function(item) { return function() { alert(item.id); self.switchto(item.id); }; })(item) ); }</code>
Alternative: jQuerys $.each()-Helper
Wenn jQuery verfügbar ist , kann der $.each()-Helfer als Abkürzung für einfache for/each-Schleifen verwendet werden. Aufgrund der Art und Weise, wie das Scoping in seinen Funktionsaufrufen funktioniert, entfällt die Notwendigkeit von Abschlüssen:
<code class="javascript">$.each(this.items,function(i, item) { // ... $("#showcasebutton_"+item.id).click(function() { alert(item.id); self.switchto(item.id); }); });</code>
Das obige ist der detaillierte Inhalt vonWie greife ich über JavaScript-Abschlüsse auf externe Variablen in Schleifen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!