Stejné názvy proměnných ve funkcích v JavaScriptu

Nechť je jak mimo funkci, tak uvnitř proměnná num. V tomto případě jakékoli změny s lokální proměnnou num nijak neovlivní globální proměnnou num:

javascriptlet num = 1; // globální proměnná

function func() {
  let num = 2; // lokální proměnná
  console.log(num);
}
func(); // voláme funkci, vypíše 2

console.log(num); // vypíše 1 - globální proměnná se nezměnila

Ale pokud zapomeneme deklarovat lokální proměnnou num pomocí let, pak uvnitř funkce se nevytvoří lokální proměnná num, ale pouze se změní globální proměnná:

javascriptlet num = 1;

function func() {
  num = 2; // zapomněli jsme napsat let - měníme vnější proměnnou
  console.log(num);
}
func(); // voláme funkci, vypíše 2

console.log(num); // vypíše 2 - proměnná se změnila

Zde mohou nastat dvě situace: buď jsme skutečně chtěli změnit globální proměnnou (pak je vše v pořádku), nebo jsme zapomněli let a náhodně změnili globální proměnnou.

Druhý případ je těžko zachytitelnou chybou, vedoucí k nepředvídatelnému chování skriptu. Proto vždy, když zavádíte novou proměnnou, deklarujte ji pomocí let.

Задание 1

Určete, bez spuštění kódu, co se vypíše do konzole:

javascriptlet num = 1;

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

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

Určete, bez spuštění kódu, co se vypíše do konzole:

javascriptlet num = 1;

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

console.log(num);