Globálna premenná počítadla v JavaScripte
Premennú num vyberieme mimo funkcií,
čím ju urobíme globálnou:
javascriptlet num = 1; // globálna premenná
function test() {
return function() {
console.log(num);
num++;
};
}
V tomto prípade budú všetky vrátené funkcie meniť túto globálnu premennú a počítadlá budú pracovať už závisle od seba:
javascriptlet num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // prvé počítadlo
func1(); // vypíše 1
func1(); // vypíše 2
let func2 = test(); // druhé počítadlo
func2(); // vypíše 3
func2(); // vypíše 4
Prečo náš predchádzajúci kód robil nezávislé počítadlá? Pripomínam tento kód:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Vec sa má tak, že premenná num je lokálna
vo vnútri funkcie test. Preto každé
volanie test vytvorí svoju vlastnú lokálnu
premennú.
Preto sa vrátené funkcie budú odkazovať
každá na svoju lokálnu premennú funkcie
test. Práve tak sa dosiahne nezávislosť
činnosti.
Ak sa num urobí globálnou premennou
- bude to tiež uzávierka. Jednoducho lexikálne
prostredia vrátených funkcií sa odkazujú
na rovnakú premennú num - akékoľvek
zmeny tejto premennej budú viditeľné vo
všetkých funkciách.
Určte, bez spustenia kódu, čo sa vypíše do konzoly:
javascriptlet counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Určte, bez spustenia kódu, čo sa vypíše do konzoly:
javascriptfunction 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čte, bez spustenia kódu, čo sa vypíše do konzoly:
javascriptfunction 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();