Пристап до надворешни променливи на функции во JavaScript

Да го разгледаме следниот код:

javascriptlet num = 1; // задаваме вредност на променливата

function func() {
  console.log(num); // го печатиме во конзола
}

func(); // ја повикуваме функцијата

Како што веќе спомнав претходно, вредноста на променливата не мора нужно да биде пред дефиницијата на функцијата, главно е да се наоѓа пред нејзиното повикување:

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

let num = 1;
func();

Всушност, ова не е сосема така. Нашата функција дури и пред нејзиното повикување ја знае вредноста на променливата num:

javascriptlet num = 1;

function func() {
  console.log(num); // функцијата веќе знае дека num = 1
}

Еве еден посложен пример:

javascriptlet num = 1; // функцијата во овој момент дознава дека num = 1

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

num = 2; // функцијата во овој момент дознава дека num = 2

Да додадеме повици на функцијата:

javascriptlet num = 1; // функцијата во овој момент дознава дека num = 1
func(); // ќе испечати 1

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

func(); // ќе испечати 1
num = 2; // функцијата во овој момент дознава дека num = 2
func(); // ќе испечати 2

Уште еднаш: всушност функцијата ги знае вредностите на надворешните променливи, дури и без да биде повикана.