Globálne premenné vo funkciách v JavaScripte

V JavaScripte (v iných jazykoch najčastejšie to tak nie je) premenné definované mimo funkcie budú viditeľné vo vnútri tejto funkcie. Takéto premenné sa nazývajú globálne. Pozrime sa na príklad:

javascriptlet num = 1; // premenná mimo funkcie

function func() {
  console.log(num); // premenná num je viditeľná vo vnútri funkcie
}

func(); // vypíše 1

V skutočnosti musí byť premenná definovaná nie pred definíciou funkcie, ale pred jej volaním:

javascriptfunction func() {
  console.log(num);
}

let num = 1; // premenná mimo funkcie
func();      // vypíše 1

Ak meníte hodnotu premennej a potom zakaždým voláte funkciu - console.log zakaždým vypíše rôzne výsledky:

javascriptfunction func() {
  console.log(num);
}

let num; // deklarujeme premennú

num = 1; // nastavíme hodnotu 1
func();  // vypíše 1

num = 2; // nastavíme hodnotu 2
func();  // vypíše 2

Ak máme viacero funkcií, tak globálna premenná bude prístupná v každej z týchto funkcií:

javascriptfunction func1() {
  console.log(num);
}

function func2() {
  console.log(num);
}

let num = 1;

func1(); // vypíše 1
func2(); // vypíše 1

Ak v jednej z funkcií dôjde k zmenám globálnej premennej, tak táto premenná sa zmení vo všetkých funkciách, ktoré používajú túto premennú:

javascriptfunction func1() {
  console.log(num);
  num++; // meníme globálnu premennú
}

function func2() {
  console.log(num);
}

let num = 1;

func1(); // vypíše 1
func2(); // vypíše 2

Pretože ľubovoľná z funkcií môže ľahko zmeniť globálnu premennú, tak ich používanie predstavuje živnú pôdu pre ťažko zachytiteľné chyby. Z tohto dôvodu je potrebné používanie globálnych premenných v skripte minimalizovať. Žiaduce je, aby ich vôbec nebolo alebo bolo čo najmenšie množstvo.

Задание 1

Určite, bez spúšťania kódu, čo sa vypíše do konzoly:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

func();
Задание 2

Určite, bez spúšťania kódu, čo sa vypíše do konzoly:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

num = 2;
func();
Задание 3

Určite, bez spúšťania kódu, čo sa vypíše do konzoly:

javascriptfunction func() {
  console.log(num);
}

let num;

num = 1;
func();

num = 2;
func();