Utumizi wa Mazingira ya Kileksika ya Kazi katika JavaScript
Acha tuwe na kazi ambayo inarudisha kazi nyingine kama matokeo yake:
function test() {
return function() {
}
}
Ikiwa kazi ya mzazi ina anuwai yoyote, basi anuwai hizo zitakuwamo kwenye mazingira ya kileksika ya kazi inayorudishwa:
function test() {
let num = 1; // anuwai ya kazi ya mzazi
return function() {
// mazingira ya kileksika = {num: 1}
}
}
Tuandike kwenye msimbo wa kazi yetu inayorudishwa
console.log, unaotoa thamani ya anuwai
num:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
Sasa tuite kazi ya mzazi
test na tuandike matokeo yake
kwenye anuwai func:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
Kazi inayorudishwa itaandikwa kwenye anuwai func.
Tuiite kazi yetu - itatoa matokeo ya kuonyesha yaliyomo kwenye anuwai
num:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // itatoa 1
Iwapo tu utajaribu kuonyesha anuwai
num nje ya kazi - haitapatikana:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
console.log(num); // anuwai num haipatikani hapa
Kama unavyoona, anuwai ya ndani num
iliunganishwa na mazingira ya kileksika ya kazi yetu
na sasa, ikiitwa mahali popote kwenye msimbo
kazi hii, tunaweza kupata thamani ya anuwai
num, hata kama mahali pa
kiitiko anuwai yenyewe haipatikani.
Kwa kweli matokeo sawa yanaweza kupatikana
kwa kufanya anuwai num kuwa ya ulimwengu:
function test() {
return function() {
console.log(num);
}
}
let num = 1; // anuwai ya ulimwengu
let func = test();
func(); // itatoa 1
Hata hivyo, kutakuwa na tofauti kubwa hapa:
katika toleo jipya anuwai num inaweza
kubadilishwa nje ya kazi (kwa kuwa ni ya ulimwengu),
lakini katika toleo la zamani - haifai.
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
let func = test();
console.log(func());
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:
function test() {
let num1 = 1;
return function() {
return num1 + num2;
}
}
let num2 = 2;
let func = test();
console.log(func());
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:
function test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());