Ein Abschluss ist eine Funktion, die Zugriff auf eine Variable im Gültigkeitsbereich einer anderen Funktion hat.
Am häufigsten wird eine weitere Funktion innerhalb einer Funktion erstellt. Nehmen Sie als Beispiel die Funktion TrialFunction():
function TrialFunction(property) { return function(a, b) { var a1 = a[property]; var b1 = b[property]; if (a1 < b1) { return -1; } else if (a1 > b1) { return 1; } else { return 0; } }; }
Im obigen Code greift die interne Funktion auf die Variableneigenschaft in der externen Funktion zu. Selbst wenn die innere Funktion zurückgegeben und an anderer Stelle aufgerufen wird, können andere weiterhin auf die Eigenschaftsvariable zugreifen.
Dies geschieht, weil die Bereichskette dieser internen Funktion den Bereich von TrialFunction umfasst.
Wenn eine Funktion aufgerufen wird, werden eine Ausführungsumgebung (Ausführungskontext) und eine entsprechende Bereichskette erstellt. Anschließend wird das Aktivitätsobjekt der Funktion mit den Werten von Argumenten und anderen benannten Parametern initialisiert. Aber in der Bereichskette steht das aktive Objekt der externen Funktion immer an zweiter Stelle, das aktive Objekt der externen Funktion an dritter Stelle und schließlich bis zur globalen Ausführungsumgebung als Bereichskette.
Um während der Funktionsausführung den Wert einer Variablen lesen und schreiben zu können, müssen Sie die Variable in der Bereichskette finden.
Dieser Mechanismus der Bereichskette führt zu einem Nebeneffekt, d. h. der Abschluss kann nur den letzten Wert einer Variablen in der enthaltenden Funktion erhalten.
Zum Beispiel:
function example() { var result = new Array(); for (var i = 0; i < 10; i++) { result[i] = function() { return i; } } return result; }
Diese Funktion gibt ein Array zurück. Im Allgemeinen wird jeder denken, dass jede Funktion ihren eigenen Index zurückgeben sollte, also [0, 1, 2, ...9 ]; aber tatsächlich gibt jede Funktion 10 zurück.
Das obige ist der detaillierte Inhalt vonDie Bedeutung des Abschlusses in JS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!