Dostop do zunanjih spremenljivk funkcij v JavaScript

Oglejmo si naslednjo kodo:

javascriptlet num = 1; // nastavimo vrednost spremenljivke

function func() {
  console.log(num); // izpišemo jo v konzolo
}

func(); // kličemo funkcijo

Kot sem že omenil prej, vrednost spremenljivke ni nujno, da je pred definicijo funkcije, glavno je, da je pred njenim klicem:

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

let num = 1;
func();

Pravzaprav to ni povsem res. Naša funkcija celo pred svojim klicem pozna vrednost spremenljivke num:

javascriptlet num = 1;

function func() {
  console.log(num); // funkcija že ve, da je num = 1
}

Tu je bolj zapleten primer:

javascriptlet num = 1; // funkcija v tem trenutku izve, da je num = 1

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

num = 2; // funkcija v tem trenutku izve, da je num = 2

Dodajmo klic funkcije:

javascriptlet num = 1; // funkcija v tem trenutku izve, da je num = 1
func(); // izpiše 1

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

func(); // izpiše 1
num = 2; // funkcija v tem trenutku izve, da je num = 2
func(); // izpiše 2

Še enkrat: pravzaprav funkcija pozna vrednosti zunanjih spremenljivk, tudi če ni bila klicana.