Anwendung des lexikalischen Umfelds von Funktionen in JavaScript
Angenommen, wir haben eine Funktion, die als Ergebnis eine andere Funktion zurückgibt:
function test() {
return function() {
}
}
Wenn die übergeordnete Funktion irgendwelche Variablen hat, dann sind diese Variablen im lexikalischen Umfeld der zurückgegebenen Funktion enthalten:
function test() {
let num = 1; // Variable der übergeordneten Funktion
return function() {
// lexikalisches Umfeld = {num: 1}
}
}
Schreiben wir in den Code unserer zurückgegebenen Funktion
console.log, der den Wert der Variable
num ausgibt:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
Lassen Sie uns nun die übergeordnete Funktion
test aufrufen und das Ergebnis ihrer Arbeit in
die Variable func schreiben:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
In die Variable func wird die zurückgegebene
Funktion geschrieben. Lassen Sie uns unsere Funktion aufrufen - als
ihr Ergebnis wird sie den Inhalt der Variable
num ausgeben:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // gibt 1 aus
Wenn man versucht, die Variable
num außerhalb der Funktion auszugeben - ist sie nicht verfügbar:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
console.log(num); // Variable num hier nicht verfügbar
Wie Sie sehen, hat sich die lokale Variable num
an das lexikalische Umfeld unserer
Funktion gebunden und jetzt können wir, wenn wir
diese Funktion an einer beliebigen Stelle im Code aufrufen,
den Wert der Variable num erhalten,
auch wenn die Variable an der Aufrufstelle
an sich nicht verfügbar ist.
Tatsächlich kann ein ähnliches Ergebnis erzielt werden,
indem man die Variable num global macht:
function test() {
return function() {
console.log(num);
}
}
let num = 1; // globale Variable
let func = test();
func(); // gibt 1 aus
Hier gibt es jedoch einen wesentlichen Unterschied:
In der neuen Variante kann die Variable num
außerhalb der Funktionen geändert werden (da sie global ist),
in der alten - nicht.
Bestimmen Sie, ohne den Code auszuführen, was in der Konsole ausgegeben wird:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
let func = test();
console.log(func());
Bestimmen Sie, ohne den Code auszuführen, was in der Konsole ausgegeben wird:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
Bestimmen Sie, ohne den Code auszuführen, was in der Konsole ausgegeben wird:
function test() {
let num1 = 1;
return function() {
return num1 + num2;
}
}
let num2 = 2;
let func = test();
console.log(func());
Bestimmen Sie, ohne den Code auszuführen, was in der Konsole ausgegeben wird:
function test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());