Nuansy rozsahu viditeľnosti premenných v konštrukciách if-else v JavaScripte
Rozsah viditeľnosti premenných má určité
nuansy. Poďme si ich ukázať na príklade.
Deklarujme mimo našej podmienky premennú
res s jednou hodnotou a vnútri
podmienky zmeňme túto hodnotu na inú:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // vypíše 2
Ako vidíte, premenná res sa zmenila
vnútri podmienky. Všetko sa však zmení,
ak vnútri podmienky tiež deklarujeme premennú
res pomocou let:
let res = 1;
if (true) {
let res = 2; // deklarujeme premennú pomocou let
}
console.log(res); // vypíše 1, nie 2!
Príčina je v tom, že deklarácia premennej
pomocou let vnútri podmienky vytvorila lokálnu
premennú res.
To znamená, že vnútri podmienky existuje jedna premenná
res a mimo podmienky - iná.
Presvedčiť sa o tom môžeme výpisom hodnoty premennej
do konzoly vnútri podmienky:
let res = 1;
if (true) {
let res = 2;
console.log(res); // vypíše 2
}
console.log(res); // vypíše 1
Autor uvedeného kódu chcel vykonať
kontrolu veku na dosiahnutie 18
rokov. Kód však pri akejkoľvek hodnote veku
vypíše do konzoly hodnotu undefined.
Opravte chybu autora kódu. Tu je problematický kód:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Autor uvedeného kódu chcel vykonať
kontrolu veku na dosiahnutie 18
rokov. Po kontrole kódu sa ukázalo, že ak
vek je rovný alebo väčší ako 18 rokov, tak
do premennej adult sa zapíše true,
ako má byť, avšak ak je vek menší
ako 18, tak premenná adult má
hodnotu undefined. Opravte chybu
autora kódu.
Tu je problematický kód:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Autor uvedeného kódu chcel vykonať
kontrolu veku. Kód však pri akejkoľvek
hodnote veku vypíše do konzoly hodnotu
undefined. Opravte chybu autora kódu.
Tu je problematický kód:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'od 18 do 23';
} else {
let res = 'viac ako 23';
}
} else {
let res = 'menej ako 18';
}
console.log(res);
Autor uvedeného kódu chcel vykonať
kontrolu veku. Kód však pri hodnote
veku väčšom ako 18 rokov vypíše do
konzoly hodnotu undefined. Opravte
chybu autora kódu.
Tu je problematický kód:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'od 18 do 23';
} else {
res = 'viac ako 23';
}
} else {
res = 'menej ako 18';
}
console.log(res);