Toepassing van Funksie Leksikale Omgewing in JavaScript
Gestel ons het 'n funksie wat 'n ander funksie as sy resultaat teruggee:
function test() {
return function() {
}
}
As die ouerfunksie enige veranderlikes het, dan sal hierdie veranderlikes in die leksikale omgewing van die teruggekeerde funksie bevat wees:
function test() {
let num = 1; // veranderlike van die ouerfunksie
return function() {
// leksikale omgewing = {num: 1}
}
}
Laat ons console.log in die kode van ons teruggekeerde funksie
skryf wat die waarde van die veranderlike
num uitdruk:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
Kom ons roep nou die ouerfunksie
test en skryf die resultaat van sy werk
in die veranderlike func:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
Die teruggekeerde funksie sal in die veranderlike func geskryf word.
Kom ons roep ons funksie - dit sal die inhoud van die veranderlike
num as sy resultaat uitdruk:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // sal 1 uitdruk
As ons bloot die veranderlike
num buite die funksie probeer uitdruk - sal dit onbeskikbaar wees:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
console.log(num); // veranderlike num is hier onbeskikbaar
Soos jy kan sien, het die plaaslike veranderlike num
aan die leksikale omgewing van ons
funksie geheg geraak en nou, deur hierdie funksie
enige plek in die kode te roep,
kan ons die waarde van die veranderlike
num kry, selfs al is die veranderlike op die roep-plek
op sigself onbeskikbaar.
Trouens, 'n soortgelyke resultaat kan
bereik word deur die veranderlike num globaal te maak:
function test() {
return function() {
console.log(num);
}
}
let num = 1; // globale veranderlike
let func = test();
func(); // sal 1 uitdruk
Hier sal daar egter 'n wesenlike verskil wees:
in die nuwe weergawe kan die veranderlike num
buite funksies verander word (aangesien dit globaal is),
maar in die ou weergawe - nie.
Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
let func = test();
console.log(func());
Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:
function test() {
let num1 = 1;
return function() {
return num1 + num2;
}
}
let num2 = 2;
let func = test();
console.log(func());
Bepaal, sonder om die kode te laat loop, wat in die konsole uitgedruk sal word:
function test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());