Prístup k externým premenným funkcií v JavaScripte

Pozrime sa na nasledujúci kód:

javascriptlet num = 1; // nastavíme hodnotu premennej

function func() {
  console.log(num); // vypíšeme ju do konzoly
}

func(); // voláme funkciu

Ako som už spomínal skôr, hodnota premennej nemusí byť nevyhnutne pred definíciou funkcie, dôležité je, aby bola pred jej volaním:

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

let num = 1;
func();

V skutočnosti to nie je úplne tak. Naša funkcia aj pred svojím volaním pozná hodnotu premennej num:

javascriptlet num = 1;

function func() {
  console.log(num); // funkcia už vie, že num = 1
}

Tu je zložitejší príklad:

javascriptlet num = 1; // funkcia v tomto momente zistí, že num = 1

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

num = 2; // funkcia v tomto momente zistí, že num = 2

Pridajme volania funkcie:

javascriptlet num = 1; // funkcia v tomto momente zistí, že num = 1
func(); // vypíše 1

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

func(); // vypíše 1
num = 2; // funkcia v tomto momente zistí, že num = 2
func(); // vypíše 2

Ešte raz: v skutočnosti funkcia pozná hodnoty externých premenných, aj keď nie je volaná.