Globální proměnná čítače v JavaScriptu
Vyneseme proměnnou num mimo funkce,
tím ji uděláme globální:
let num = 1; // globální proměnná
function test() {
return function() {
console.log(num);
num++;
};
}
V tomto případě všechny vrácené funkce budou měnit tuto globální proměnnou a čítače již budou pracovat závisle na sobě:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // první čítač
func1(); // vypíše 1
func1(); // vypíše 2
let func2 = test(); // druhý čítač
func2(); // vypíše 3
func2(); // vypíše 4
Proč tedy náš předchozí kód dělal nezávislé čítače? Připomenu tento kód:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Jde o to, že proměnná num je lokální
uvnitř funkce test. Proto každé
volání test vytváří svou vlastní lokální
proměnnou.
Proto se vrácené funkce budou odkazovat
každá na svou vlastní lokální proměnnou funkce
test. Právě tak se dosáhne nezávislosti
práce.
Pokud se num udělá globální proměnnou
- bude to také uzávěra. Prostě lexikální
prostředí vrácených funkcí se odkazují
na stejnou proměnnou num - jakékoli
změny této proměnné budou viditelné ve
všech funkcích.
Určete, bez spuštění kódu, co se vypíše do konzole:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Určete, bez spuštění kódu, co se vypíše do konzole:
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();
Určete, bez spuštění kódu, co se vypíše do konzole:
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();