Nuance oblasti viditelnosti proměnných v konstrukcích if-else v JavaScriptu
Oblast viditelnosti proměnných má určitou
nuanci. Pojďme si ji ukázat na příkladu.
Pojďme mimo naši podmínku deklarovat proměnnou
res s jednou hodnotou a uvnitř
podmínky tuto hodnotu změnit na jinou:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // vypíše 2
Jak vidíte, proměnná res se změnila
uvnitř podmínky. Vše se však změní,
pokud uvnitř podmínky také deklarujeme proměnnou
res pomocí let:
let res = 1;
if (true) {
let res = 2; // deklarujeme proměnnou pomocí let
}
console.log(res); // vypíše 1, a ne 2!
Zde je celé tajemství v tom, že deklarace proměnné
pomocí let uvnitř podmínky vytvořila lokální
proměnnou res.
To znamená, že uvnitř podmínky existuje jedna proměnná
res a vně podmínky - druhá.
Přesvědčit se o tom můžeme výpisem hodnoty proměnné
do konzole uvnitř podmínky:
let res = 1;
if (true) {
let res = 2;
console.log(res); // vypíše 2
}
console.log(res); // vypíše 1
Autor níže uvedeného kódu chtěl provést
kontrolu věku na dosažení 18
let. Kód však při jakékoli hodnotě věku
vypisuje do konzole hodnotu undefined.
Opravte chybu autora kódu. Zde je problematický kód:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Autor níže uvedeného kódu chtěl provést
kontrolu věku na dosažení 18
let. Po kontrole kódu se ukázalo, že pokud
je věk roven nebo větší než 18 let, pak
se do proměnné adult zapíše true,
jak by mělo být, avšak pokud je věk menší
než 18, pak má proměnná adult
hodnotu undefined. Opravte chybu
autora kódu.
Zde je problematický kód:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Autor níže uvedeného kódu chtěl provést
kontrolu věku. Kód však při jakékoli
hodnotě věku vypisuje do konzole hodnotu
undefined. Opravte chybu autora kódu.
Zde je problematický kód:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'od 18 do 23';
} else {
let res = 'větší než 23';
}
} else {
let res = 'méně než 18';
}
console.log(res);
Autor níže uvedeného kódu chtěl provést
kontrolu věku. Kód však při hodnotě
věku větší než 18 let vypisuje do
konzole hodnotu undefined. Opravte
chybu autora kódu.
Zde je problematický kód:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'od 18 do 23';
} else {
res = 'větší než 23';
}
} else {
res = 'méně než 18';
}
console.log(res);