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 ни чиқаради

Яна бир бор: аслича функция ташқи ўзгарувчиларнинг қийматларини, ҳатто чақирилмаган ҳолда ҳам билади.