Funktsioonide juurdepääs välistele muutujatele JavaScriptis

Vaatleme järgmist koodi:

javascriptlet num = 1; // määrame muutuja väärtuse

function func() {
  console.log(num); // väljastame selle konsooli
}

func(); // kutsume funktsiooni välja

Nagu ma varem mainisin, ei pea muutuja väärtus tingimata olema enne funktsiooni määratlust, peamine on, et see oleks enne selle väljakutset:

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

let num = 1;
func();

Tegelikult ei ole see päris nii. Meie funktsioon teab muutuja väärtust isegi enne oma väljakutset num:

javascriptlet num = 1;

function func() {
  console.log(num); // funktsioon juba teab, et num = 1
}

Siin on keerulisem näide:

javascriptlet num = 1; // funktsioon saab sel hetkel teada, et num = 1

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

num = 2; // funktsioon saab sel hetkel teada, et num = 2

Lisame funktsiooni väljakutsed:

javascriptlet num = 1; // funktsioon saab sel hetkel teada, et num = 1
func(); // väljastab 1

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

func(); // väljastab 1
num = 2; // funktsioon saab sel hetkel teada, et num = 2
func(); // väljastab 2

Veelkord: tegelikult funktsioon teab väliste muutujate väärtusi isegi siis, kui teda pole välja kutsutud.