Նույնական փոփոխականների անունները ֆունկցիաներում JavaScript-ում

Ենթադրենք՝ և՛ ֆունկցիայից դուրս, և՛ ներսում կա num փոփոխականը: Այս դեպքում լոկալ num փոփոխականի հետ կատարվող ցանկացած փոփոխություն ոչ մի կերպ չի ազդում գլոբալ num փոփոխականի վրա:

javascriptlet num = 1; // գլոբալ փոփոխական

function func() {
  let num = 2; // լոկալ փոփոխական
  console.log(num);
}
func(); // կանչում ենք ֆունկցիան, կարտածի 2

console.log(num); // կարտածի 1 - գլոբալ փոփոխականը չի փոխվել

Սակայն, եթե մենք մոռանանք let-ով հայտարարել լոկալ num փոփոխականը, ապա ֆունկցիայի ներսում չի ստեղծվի լոկալ num փոփոխական, այլ պարզապես կփոխվի գլոբալ փոփոխականը:

javascriptlet num = 1;

function func() {
  num = 2; // մոռացել ենք գրել let - փոխում ենք արտաքին փոփոխականը
  console.log(num);
}
func(); // կանչում ենք ֆունկցիան, կարտածի 2

console.log(num); // կարտածի 2 - փոփոխականը փոխվել է

Այստեղ կարող է լինել երկու իրավիճակ՝ կամ մենք իսկապես ցանկանում էինք փոխել գլոբալ փոփոխականը (այդ դեպքում ամեն ինչ կարգին է), կամ մենք մոռացել ենք let-ը և պատահաբար փոխել ենք գլոբալ փոփոխականը:

Երկրորդ դեպքը դժվարաբռնելի սխալ է, որն ուղեցություն է տալիս սցենարի անկանխատեսելի վարքագծին: Ուստի միշտ, նոր փոփոխական ներմուծելիս հայտարարեք այն let-ով:

Задание 1

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

javascriptlet num = 1;

function func() {
  num = 2;
}
func();

console.log(num);
Задание 2

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

javascriptlet num = 1;

function func() {
  let num = 2;
}
func();

console.log(num);