Utumizi wa Mazingira ya Kileksika ya Kazi katika JavaScript
Acha tuwe na kazi ambayo inarudisha kazi nyingine kama matokeo yake:
javascriptfunction test() {
return function() {
}
}
Ikiwa kazi ya mzazi ina anuwai yoyote, basi anuwai hizo zitakuwamo kwenye mazingira ya kileksika ya kazi inayorudishwa:
javascriptfunction 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:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
Sasa tuite kazi ya mzazi
test na tuandike matokeo yake
kwenye anuwai func:
javascriptfunction 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:
javascriptfunction 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:
javascriptfunction 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:
javascriptfunction 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:
javascriptfunction 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:
javascriptfunction test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:
javascriptfunction 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:
javascriptfunction test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());