Kintamųjų matomumo sritis if-else konstrukcijoje JavaScript

Tegu paprastumo dėlei mes turime visada įvykdomą sąlygą:

javascriptif (true) {
  
}

Panagrinėkime tokį kodą:

javascriptif (true) {
  let res = '!';
}

console.log(res);

Kaip matote, į kintamąjį res turėtų būti įrašyta reikšmė '!'. Tačiau, jei paleisite šį kodą, konsolėje bus išvesta klaida!

Esmė ta, kad kintamieji, deklaruoti viduje riestinių skliaustų, yra matomi tik viduje tų skliaustų ir nėra matomi išorėje. Moksliniu požiūriu čia kalbama apie kintamųjų matomumo sritį.

Galima sakyti, kad kintamųjų, deklaruotų riestinių skliaustų viduje, matomumo sritis yra tik tie riestiniai skliaustai. Tačiau, jei kintamasis deklaruotas išorėje riestinių skliaustų, tai jis matomas ir viduje jų, ir išorėje:

javascriptlet res; // kintamasis deklaruotas išorėje

if (true) {
  res = '!';
}

console.log(res); // išves '!'

Šiame pavyzdyje į kintamąjį res priklausomai nuo sąlygos įrašoma arba reikšmė 1, arba reikšmė 2:

javascriptlet num = 5;

if (num >= 0) {
  let res = 1;
} else {
  let res = 2;
}

console.log(res);

Tačiau, jei paleisite šį kodą, konsolėje bus išvesta klaida. Kaip jau dabar suprantate, visa problema yra kintamųjų matomume. Problemai išspręsti deklaruokime kintamąjį išorėje sąlygos:

javascriptlet test = true;
let res; // deklaruojame kintamąjį išorėje sąlygos

if (test) {
  res = 1;
} else {
  res = 2;
}

console.log(res); // išves 1
Задание 1

Žemiau pateikto kodo autorius norėjo atlikti amžiaus patikriną ar pasiekta 18 metų. Tačiau kodas neveikia. Ištaisykite kodo autoriau klaidą. Štai problematiškas kodas:

javascriptlet age = 17;

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

console.log(adult);