Niuanse zakresu zmiennych w konstrukcjach if-else w JavaScript
Zakres zmiennych ma pewien
niuans. Przyjrzyjmy się mu na przykładzie.
Zadeklarujmy na zewnątrz naszego warunku zmienną
res z jedną wartością, a wewnątrz
warunku zmieńmy tę wartość na inną:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // wypisze 2
Jak widać, zmienna res zmieniła się
wewnątrz warunku. Wszystko jednak się zmieni,
jeśli wewnątrz warunku również zadeklarujemy zmienną
res przez let:
let res = 1;
if (true) {
let res = 2; // zadeklarujmy zmienną przez let
}
console.log(res); // wypisze 1, a nie 2!
Tutaj chodzi o to, że deklaracja zmiennej
przez let wewnątrz warunku stworzyła lokalną
zmienną res.
Czyli wewnątrz warunku istnieje jedna zmienna
res, a na zewnątrz warunku - inna.
Można się o tym przekonać, wypisując wartość zmiennej
do konsoli wewnątrz warunku:
let res = 1;
if (true) {
let res = 2;
console.log(res); // wypisze 2
}
console.log(res); // wypisze 1
Autor poniższego kodu chciał wykonać
sprawdzenie wieku na osiągnięcie 18
lat. Kod jednak przy dowolnej wartości wieku
wypisuje do konsoli wartość undefined.
Popraw błąd autora kodu. Oto problematyczny kod:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Autor poniższego kodu chciał wykonać
sprawdzenie wieku na osiągnięcie 18
lat. Po sprawdzeniu kodu okazało się, że jeśli
wiek jest równy lub większy niż 18 lat, to
do zmiennej adult zostaje zapisane true,
jak powinno być, jednakże jeśli wiek jest mniejszy
niż 18, to zmienna adult ma
wartość undefined. Popraw błąd
autora kodu.
Oto problematyczny kod:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Autor poniższego kodu chciał wykonać
sprawdzenie wieku. Kod jednak przy dowolnej
wartości wieku wypisuje do konsoli wartość
undefined. Popraw błąd autora kodu.
Oto problematyczny kod:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'od 18 do 23';
} else {
let res = 'więcej niż 23';
}
} else {
let res = 'mniej niż 18';
}
console.log(res);
Autor poniższego kodu chciał wykonać
sprawdzenie wieku. Kod jednak przy wartości
wieku większej niż 18 lat wypisuje do
konsoli wartość undefined. Popraw
błąd autora kodu.
Oto problematyczny kod:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'od 18 do 23';
} else {
res = 'więcej niż 23';
}
} else {
res = 'mniej niż 18';
}
console.log(res);