Tofauti ya Ulimwengu ya Khesimu katika JavaScript
Tutoee tofauti num nje ya kazi,
kwa kufanya hivyo tukifanya iwe ya ulimwengu:
let num = 1; // tofauti ya ulimwengu
function test() {
return function() {
console.log(num);
num++;
};
}
Katika kesi hii kazi zote zitarudi (kubadilisha hii tofauti ya ulimwengu na khesimu (kata kufanya kazi tayari kutegemeana:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // khesimu ya kwanza
func1(); // itaonyesha 1
func1(); // itaonyesha 2
let func2 = test(); // khesimu ya pili
func2(); // itaonyesha 3
func2(); // itaonyesha 4
Kwa nini msimbo wetu uliopita ulifanya khesimu (zisizotegemeana? Nakukumbusha msimbo huu:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Jambo ni kwamba tofauti num - ya ndani
ndani ya kazi test. Kwa hivyo kila
(wito test huleta tofauti yake ya ndani.
Kwa hivyo kazi zitarudi (rejea
kila moja kwa tofauti yake ya ndani ya kazi
test. Hivi ndivyo utofauti wa kufanya kazi
(unavyopatikana.
Ikiwa tutafanya num kuwa tofauti ya ulimwengu
- hii pia itakuwa kufunga. Tu mazingira ya kisarakasi
ya kazi zitarudi (rejea
kwa tofauti ile ile num - yoyote
mabadiliko na tofauti hii yataonekana kwa
kazi zote.
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye koni:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye koni:
function test() {
let counter = 0;
return function() {
return function() {
console.log(counter);
counter++;
};
};
}
let func = test()();
let func1 = func;
let func2 = func;
func1();
func2();
func1();
func2();
Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye koni:
function test() {
let counter = 0;
return function() {
return function() {
console.log(counter);
counter++;
};
};
}
let func = test();
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();