Prieiga prie išorinių funkcijų kintamųjų JavaScript

Panagrinėkime tokį kodą:

javascriptlet num = 1; // nustatome kintamojo reikšmę

function func() {
  console.log(num); // išvedame ją į konsolę
}

func(); // iškviečiame funkciją

Kaip jau minėjau anksčiau, kintamojo reikšmė nebūtinai turi būti prieš funkcijos apibrėžimą, svarbiausia, kad ji būtų prieš jos iškvietimą:

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

let num = 1;
func();

Iš tikrųjų tai nėra visiškai taip. Mūsų funkcija net prieš savo iškvietimą žino kintamojo reikšmę num:

javascriptlet num = 1;

function func() {
  console.log(num); // funkcija jau žino, kad num = 1
}

Štai sudėtingesnis pavyzdys:

javascriptlet num = 1; // funkcija šiuo momentu sužino, kad num = 1

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

num = 2; // funkcija šiuo momentu sužino, kad num = 2

Pridėkime funkcijos iškvietimus:

javascriptlet num = 1; // funkcija šiuo momentu sužino, kad num = 1
func(); // išves 1

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

func(); // išves 1
num = 2; // funkcija šiuo momentu sužino, kad num = 2
func(); // išves 2

Dar kartą: iš tikrųjų funkcija žino išorinių kintamųjų reikšmes, net jei nebuvo iškviesta.