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:

javascriptlet 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á:

javascriptlet 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.

Задание 1

Určte, bez spustenia kódu, čo sa vypíše do konzoly:

javascriptlet num = 1;

function func() {
  num = 2;
}
func();

console.log(num);
Задание 2

Určte, bez spustenia kódu, čo sa vypíše do konzoly:

javascriptlet num = 1;

function func() {
  let num = 2;
}
func();

console.log(num);