Global variabel for teller i JavaScript
La oss flytte variabelen num utenfor funksjonene,
og dermed gjøre den global:
let num = 1; // global variabel
function test() {
return function() {
console.log(num);
num++;
};
}
I dette tilfellet vil alle de returnerte funksjonene endre denne globale variabelen og tellerne vil nå jobbe avhengig av hverandre:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // første teller
func1(); // skriver ut 1
func1(); // skriver ut 2
let func2 = test(); // andre teller
func2(); // skriver ut 3
func2(); // skriver ut 4
Hvorfor skilte vår forrige kode ut uavhengige tellere? La meg minne om denne koden:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Saken er at variabelen num er lokal
inni funksjonen test. Derfor skaper hvert
kall til test sin egen lokale
variabel.
Derfor vil de returnerte funksjonene referere
hver til sin egen lokale variabel av funksjonen
test. Det er slik uavhengighet
oppnås.
Hvis du derimot gjør num til en global variabel
- vil dette også være en lukning. Bare de leksikalske
omgivelsene til de returnerte funksjonene refererer
til den samme variabelen num - alle
endringer av denne variabelen vil være synlige i
alle funksjoner.
Bestem, uten å kjøre koden, hva som vil skrives ut i konsollen:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Bestem, uten å kjøre koden, hva som vil skrives ut i konsollen:
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();
Bestem, uten å kjøre koden, hva som vil skrives ut i konsollen:
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();