Kintamųjų matomumo sritis if-else konstrukcijoje JavaScript
Tegu paprastumo dėlei mes turime visada įvykdomą sąlygą:
if (true) {
}
Panagrinėkime tokį kodą:
if (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:
let 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:
let 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:
let 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
Ž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:
let age = 17;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);