Дастрасӣ ба тағйирёбандаҳои берунаи функсияҳо дар 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-ро мебарорад

Бори дигар: дар асл функсия қиматҳои тағйирёбандаҳои берунаро медонад, ҳатто вақте ки фарохонда нашудааст.