Pristup spoljnim promenljivim funkcija u JavaScriptu

Hajde da razmotrimo sledeći kod:

javascriptlet num = 1; // postavljamo vrednost promenljive

function func() {
  console.log(num); // ispisujemo je u konzolu
}

func(); // pozivamo funkciju

Kao što sam ranije pomenuo, vrednost promenljive ne mora nužno da bude pre definicije funkcije, glavno je da stoji pre njenog poziva:

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

let num = 1;
func();

Zapravo, to nije sasvim tačno. Naša funkcija čak i pre svog poziva zna vrednost promenljive num:

javascriptlet num = 1;

function func() {
  console.log(num); // funkcija već zna da je num = 1
}

Evo složenijeg primera:

javascriptlet num = 1; // funkcija u ovom trenutku saznaje da je num = 1

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

num = 2; // funkcija u ovom trenutku saznaje da je num = 2

Dodajmo pozive funkcije:

javascriptlet num = 1; // funkcija u ovom trenutku saznaje da je num = 1
func(); // ispisaće 1

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

func(); // ispisaće 1
num = 2; // funkcija u ovom trenutku saznaje da je num = 2
func(); // ispisaće 2

Još jednom: zapravo funkcija zna vrednosti spoljnih promenljivih, čak i ako nije pozvana.