Pieejas pie ārējiem mainīgajiem funkcijās JavaScript

Apskatīsim šādu kodu:

javascriptlet num = 1; // iestatām mainīgā vērtību

function func() {
  console.log(num); // izvadām to konsolē
}

func(); // izsaucam funkciju

Kā jau iepriekš minēju, mainīgā vērtībai nav obligāti jābūt pirms funkcijas definīcijas, galvenais, lai tā būtu pirms tās izsaukšanas:

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

let num = 1;
func();

Patiesībā tas nav gluži tā. Mūsu funkcija zin mainīgā vērtību pat pirms savas izsaukšanas num:

javascriptlet num = 1;

function func() {
  console.log(num); // funkcija jau zina, ka num = 1
}

Šeit ir sarežģītāks piemērs:

javascriptlet num = 1; // funkcija šajā brīdī uzzina, ka num = 1

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

num = 2; // funkcija šajā brīdī uzzina, ka num = 2

Pievienosim funkcijas izsaukumus:

javascriptlet num = 1; // funkcija šajā brīdī uzzina, ka num = 1
func(); // izvadīs 1

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

func(); // izvadīs 1
num = 2; // funkcija šajā brīdī uzzina, ka num = 2
func(); // izvadīs 2

Vēlreiz: patiesībā funkcija zina ārējo mainīgo vērtības, pat ja tā nav izsaukta.