Փոփոխականների տեսանելիության տիրույթի նրբությունները if-else կառուցվածքներում JavaScript-ում

Փոփոխականների տեսանելիության տիրույթն ունի որոշակի նրբություն։ Եկեք դիտարկենք այն օրինակով։ Եկեք մեր պայմանի սահմաններից դուրս հայտարարենք res փոփոխականը մի արժեքով, իսկ ներսում պայմանի փոխենք այդ արժեքը մեկ այլ արժեքի.

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // կարտածի 2

Ինչպես տեսնում եք, res փոփոխականը փոխվեց պայմանի ներսում։ Սակայն ամեն ինչ կփոխվի, եթե պայմանի ներսում res փոփոխականը նաև հայտարարենք let-ով.

javascriptlet res = 1;

if (true) {
  let res = 2; // հայտարարենք փոփոխականը let-ով
}

console.log(res); // կարտածի 1, և ոչ 2!

Այստեղ ամբողջ բանը նրանում է, որ փոփոխականի հայտարարումը let-ով պայմանի ներսում ստեղծեց լոկալ res փոփոխական։

Այսինքն պայմանի ներսում գոյություն ունի մի res փոփոխական, իսկ պայմանի սահմաններից դուրս՝ մեկ այլ։ Դրանում կարելի է համոզվել՝ արտածելով փոփոխականի արժեքը կոնսոլում պայմանի ներսում.

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // կարտածի 2
}

console.log(res); // կարտածի 1
Задание 1

Ստորև բերված կոդի հեղինակը ցանկանում էր կատարել տարիքի ստուգում 18 տարեկան դառնալու համար։ Սակայն կոդը տարիքի ցանկացած արժեքի դեպքում արտածում է կոնսոլում undefined արժեքը։ Ուղղեք կոդի հեղինակի սխալը։ Ահա խնդրահարույց կոդը.

javascriptlet age = 17;
let adult;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

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

Ստորև բերված կոդի հեղինակը ցանկանում էր կատարել տարիքի ստուգում 18 տարեկան դառնալու համար։ Կոդի ստուգումից հետո պարզվեց, որ եթե տարիքը հավասար կամ մեծ է 18 տարեկանից, ապա adult փոփոխականի մեջ գրվում է true, ինչպես և պետք է լինի, սակայն, եթե տարիքը փոքր է 18-ից, ապա adult փոփոխականն ունի undefined արժեք։ Ուղղեք կոդի հեղինակի սխալը։

Ահա խնդրահարույց կոդը.

javascriptlet age = 17;
let adult;

if (age >= 18) {
  adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 3

Ստորև բերված կոդի հեղինակը ցանկանում էր կատարել տարիքի ստուգում։ Սակայն կոդը տարիքի ցանկացած արժեքի դեպքում արտածում է կոնսոլում undefined արժեքը։ Ուղղեք կոդի հեղինակի սխալը։

Ահա խնդրահարույց կոդը.

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = '18-ից 23';
  } else {
    let res = '23-ից մեծ';
  }
} else {
  let res = '18-ից փոքր';
}

console.log(res);
Задание 4

Ստորև բերված կոդի հեղինակը ցանկանում էր կատարել տարիքի ստուգում։ Սակայն կոդը տարիքի 18-ից մեծ արժեքի դեպքում արտածում է կոնսոլում undefined արժեքը։ Ուղղեք կոդի հեղինակի սխալը։

Ահա խնդրահարույց կոդը.

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = '18-ից 23';
  } else {
    res = '23-ից մեծ';
  }
} else {
  res = '18-ից փոքր';
}

console.log(res);