Ֆունկցիաների մուտքը արտաքին փոփոխականներին 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

Եվս մեկ անգամ. իրականում ֆունկցիան գիտի արտաքին փոփոխականների արժեքները, նույնիսկ առանց կանչվելու։