Globale veranderlike teller in JavaScript
Laat ons die veranderlike num buite die funksies plaas,
en sodoende 'n globale veranderlike daarvan maak:
let num = 1; // globale veranderlike
function test() {
return function() {
console.log(num);
num++;
};
}
In hierdie geval sal alle teruggekeerde funksies die globale veranderlike verander en die tellers sal alreeds van mekaar afhanklik werk:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // eerste teller
func1(); // sal 1 wys
func1(); // sal 2 wys
let func2 = test(); // tweede teller
func2(); // sal 3 wys
func2(); // sal 4 wys
Hoekom het ons vorige kode dan onafhanklike tellers gemaak? Laat ek hierdie kode onthou:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Die saak is dat die veranderlike num - plaaslik
binne die funksie test is. Daarom skep elke
oproep van test sy eie plaaslike
veranderlike.
Dus sal die teruggekeerde funksies elk verwys
na hul eie plaaslike veranderlike van die funksie
test. Dit is presies hoe onafhanklikheid
bereik word.
As jy num 'n globale veranderlike maak
- sal dit ook 'n sluiting wees. Net die leksikale
omgewings van die teruggekeerde funksies verwys
na dieselfde veranderlike num - enige
veranderinge aan hierdie veranderlike sal sigbaar wees in
alle funksies.
Bepaal, sonder om die kode uit te voer, wat in die konsole uitgevoer sal word:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Bepaal, sonder om die kode uit te voer, wat in die konsole uitgevoer sal word:
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();
Bepaal, sonder om die kode uit te voer, wat in die konsole uitgevoer sal word:
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();