Rovnaké názvy premenných vo funkciách v JavaScripte
Ak je premenná
num definovaná mimo funkcie aj vo vnútri, potom akékoľvek zmeny
s lokálnou premennou num nemajú žiadny vplyv
na globálnu premennú num:
let num = 1; // globálna premenná
function func() {
let num = 2; // lokálna premenná
console.log(num);
}
func(); // voláme funkciu, vypíše 2
console.log(num); // vypíše 1 - globálna premenná sa nezmenila
Ale ak zabudneme deklarovať lokálnu premennú
num pomocou let, potom sa vo vnútri funkcie
nevytvorí lokálna premenná num,
ale jednoducho sa zmení globálna premenná:
let num = 1;
function func() {
num = 2; // zabudli sme napísať let - meníme vonkajšiu premennú
console.log(num);
}
func(); // voláme funkciu, vypíše 2
console.log(num); // vypíše 2 - premenná sa zmenila
Môžu nastať dve situácie: buď sme naozaj
chceli zmeniť globálnu premennú (vtedy
je všetko v poriadku), alebo sme zabudli na let a náhodne
zmenili globálnu premennú.
Druhý prípad je ťažko zachytiteľnou chybou,
ktorá vedie k nepredvídateľnému správaniu skriptu.
Preto vždy pri zavádzaní novej premennej ju deklarujte
pomocou let.
Určte, bez spustenia kódu, čo sa vypíše do konzoly:
let num = 1;
function func() {
num = 2;
}
func();
console.log(num);
Určte, bez spustenia kódu, čo sa vypíše do konzoly:
let num = 1;
function func() {
let num = 2;
}
func();
console.log(num);