Globale tellervariabele in JavaScript
Laten we de variabele num buiten de functies plaatsen,
waardoor deze globaal wordt:
let num = 1; // globale variabele
function test() {
return function() {
console.log(num);
num++;
};
}
In dit geval zullen alle geretourneerde functies deze globale variabele wijzigen en de tellers zullen afhankelijk van elkaar werken:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // eerste teller
func1(); // geeft 1 weer
func1(); // geeft 2 weer
let func2 = test(); // tweede teller
func2(); // geeft 3 weer
func2(); // geeft 4 weer
Waarom maakte onze vorige code dan onafhankelijke tellers? Laat me die code herinneren:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Het feit is dat de variabele num - lokaal is
binnen de functie test. Daarom creëert elke
aanroep van test zijn eigen lokale
variabele.
Daarom zullen de geretourneerde functies
elk verwijzen naar hun eigen lokale variabele van de functie
test. Dit is precies hoe onafhankelijkheid
wordt bereikt.
Als je num een globale variabele maakt
- zal dit ook een closure zijn. Alleen verwijzen de lexicale
omgevingen van de geretourneerde functies
naar dezelfde variabele num - eventuele
wijzigingen aan deze variabele zullen zichtbaar zijn in
alle functies.
Bepaal, zonder de code uit te voeren, wat er in de console wordt weergegeven:
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, zonder de code uit te voeren, wat er in de console wordt weergegeven:
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, zonder de code uit te voeren, wat er in de console wordt weergegeven:
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();