Global tællevariabel i JavaScript
Lad os flytte variablen num uden for funktionerne,
herved gøre den global:
let num = 1; // global variabel
function test() {
return function() {
console.log(num);
num++;
};
}
I dette tilfælde vil alle returnerede funktioner ændre denne globale variabel, og tællere vil arbejde afhængigt af hinanden:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // første tæller
func1(); // udskriver 1
func1(); // udskriver 2
let func2 = test(); // anden tæller
func2(); // udskriver 3
func2(); // udskriver 4
Hvorfor skabte vores foregående kode uafhængige tællere? Lad mig huske denne kode:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Faktum er, at variablen num er lokal
inde i funktionen test. Derfor skaber hvert
kald til test sin egen lokale
variabel.
Derfor vil de returnerede funktioner henvise
hver til deres egen lokale variabel af funktionen
test. Det er sådan, uafhængighed
opnås.
Hvis man derimod gør num til en global variabel
- vil det også være en lukning. Det er bare, at de leksikalske
miljøer for de returnerede funktioner henviser
til den samme variabel num - enhver
ændring af denne variabel vil være synlig i
alle funktioner.
Bestem, uden at køre koden, hvad der udskrives 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, uden at køre koden, hvad der udskrives 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, uden at køre koden, hvad der udskrives 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();