Գլոբալ փոփոխականները ֆունկցիաներում JavaScript-ում

JavaScript-ում (այլ լեզուներում ամենից հաճախ այդպես չէ) ֆունկցիայի դուրս սահմանված փոփոխականները տեսանելի կլինեն այդ ֆունկցիայի ներսում: Նման փոփոխականները կոչվում են գլոբալ: Տեսնենք օրինակով.

javascriptlet num = 1; // փոփոխականը ֆունկցիայից դուրս

function func() {
  console.log(num); // num փոփոխականը տեսանելի է ֆունկցիայի ներսում
}

func(); // կարտածի 1

Իրականում փոփոխականը պետք է սահմանված լինի ոչ թե ֆունկցիայի սահմանումից առաջ, այլ նրա կանչից առաջ.

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

let num = 1; // փոփոխականը ֆունկցիայից դուրս
func();      // կարտածի 1

Եթե փոխենք փոփոխականի արժեքը և դրանից հետո ամեն անգամ կանչենք ֆունկցիան - console.log ամեն անգամ կարտածի տարբեր արդյունքներ.

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

let num; // հայտարարենք փոփոխականը

num = 1; // տալիս ենք 1 արժեքը
func();  // կարտածի 1

num = 2; // տալիս ենք 2 արժեքը
func();  // կարտածի 2

Եթե ունենք մի քանի ֆունկցիա, ապա գլոբալ փոփոխականը հասանելի կլինի այդ ֆունկցիաներից յուրաքանչյուրում.

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

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

let num = 1;

func1(); // կարտածի 1
func2(); // կարտածի 1

Եթե ֆունկցիաներից մեկում տեղի ունենա գլոբալ փոփոխականի փոփոխություն, ապա այդ փոփոխականը կփոխվի բոլոր այն ֆունկցիաներում, որոնք օգտագործում են այդ փոփոխականը.

javascriptfunction func1() {
  console.log(num);
  num++; // փոխում ենք գլոբալ փոփոխականը
}

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

let num = 1;

func1(); // կարտածի 1
func2(); // կարտածի 2

Քանի որ ֆունկցիաներից ցանկացածը հեշտությամբ կարող է փոխել գլոբալ փոփոխականը, ապա դրանց օգտագործումը ներկայացնում է դժվարաբռնելի սխալների բուծման տեղ: Այս պատճառով գլոբալ փոփոխականների օգտագործումը սկրիպտում պետք է հասցնել նվազագույնի: Ցանկալի է, որ դրանք ընդհանրապես չլինեն կամ լինեն նվազագույն քանակով:

Задание 1

Որոշեք՝ առանց կոդը գործարկելու, թե ինչ կարտածվի կոնսոլում.

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

func();
Задание 2

Որոշեք՝ առանց կոդը գործարկելու, թե ինչ կարտածվի կոնսոլում.

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

num = 2;
func();
Задание 3

Որոշեք՝ առանց կոդը գործարկելու, թե ինչ կարտածվի կոնսոլում.

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

let num;

num = 1;
func();

num = 2;
func();