Heim  >  Artikel  >  Web-Frontend  >  Wie greife ich innerhalb einer JavaScript-Schließungsschleife auf eine externe Variable zu?

Wie greife ich innerhalb einer JavaScript-Schließungsschleife auf eine externe Variable zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-20 08:56:02339Durchsuche

How to Access an Outside Variable within a JavaScript Closure Loop?

Zugriff auf externe Variablen in einer Schleife durch JavaScript-Abschluss

In JavaScript kommt es häufig vor, dass bei der Iteration über ein Array mithilfe einer For-Schleife ein Fehler auftritt Ein Problem, bei dem der Wert einer Variablen innerhalb der Schleife immer mit dem Wert der letzten Iteration übereinstimmt. Dies ist auf unterschiedliche Bereiche und Abschlüsse zurückzuführen.

Um dieses Problem zu lösen, kann eine Technik namens Abschlüsse eingesetzt werden. Ein Abschluss ist eine Funktion, die eine Funktion zurückgibt, die den Variablenbereich der übergeordneten Funktion erfasst.

Betrachten Sie das folgende Beispiel:

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"><img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(function() {
        alert(item.id);
        self.switchto(item.id);
    });
}</code>

In diesem Code ändert sich das Variablenelement mit jedem Iteration der Schleife. Wenn der Click-Handler aufgerufen wird, verwendet er den letzten Wert von item.

Um dieses Problem zu lösen, können wir einen Abschluss verwenden, um den Bereich der Schleifenvariablen zu erfassen:

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"><img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(
        // create an anonymous function that will scope "item"
        (function(item) {
            // that returns our function
            return function() {
                alert(item.id);
                self.switchto(item.id);
            };
        })(item) // immediately call it with "item"
    );
}</code>

Hier: Wir verpacken die Click-Handler-Funktion in eine andere Funktion, die den Umfang des Elements während der Schleifeniteration erfasst. Wenn der Click-Handler aufgerufen wird, verwendet er den korrekten Wert von item.

Ein alternativer Ansatz besteht darin, die Funktion $.each() von jQuery zu verwenden, die die Schleifenvariable automatisch abruft, sodass kein Abschluss erforderlich ist:

<code class="javascript">$.each(this.items, function(i, item) {
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"><img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(function() {
        alert(item.id);
        self.switchto(item.id);
    });
});</code>

Das obige ist der detaillierte Inhalt vonWie greife ich innerhalb einer JavaScript-Schließungsschleife auf eine externe Variable zu?. 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