Muuttujien näkyvyysalueen vivahteet if-else-rakenteissa JavaScriptissä
Muuttujien näkyvyysalueella on tiettyjä
vivahteita. Katsotaanpa sitä esimerkin avulla.
Esittelemme ehdon ulkopuolella muuttujan
res yhdellä arvolla, ja ehdon sisällä
muutamme tämän arvon toiseksi:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // tulostaa 2
Kuten näet, muuttuja res muuttui
ehdon sisällä. Kaikki kuitenkin muuttuu,
jos ehdon sisällä esitellään myös muuttuja
res käyttäen let:
let res = 1;
if (true) {
let res = 2; // esitellään muuttuja let:llä
}
console.log(res); // tulostaa 1, eikä 2!
Asia on siinä, että muuttujan esittely
käyttäen let ehdon sisällä loi paikallisen
muuttujan res.
Eli ehdon sisällä on olemassa yksi muuttuja
res, ja ehdon ulkopuolella - toinen.
Tämä voidaan varmistaa tulostamalla muuttujan arvo
konsoliin ehdon sisällä:
let res = 1;
if (true) {
let res = 2;
console.log(res); // tulostaa 2
}
console.log(res); // tulostaa 1
Alla olevan koodin authori halusi suorittaa
ikätarkistuksen 18
vuoden täyttämiselle. Kodi kuitenkin tulostaa konsoliin
arvon undefined riippumatta iän arvosta.
Korjaa koodin authorin virhe. Tässä on ongelmallinen koodi:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Alla olevan koodin authori halusi suorittaa
ikätarkistuksen 18
vuoden täyttämiselle. Koodin tarkistuksen jälkeen kävi ilmi, että jos
ikä on yhtä suuri tai suurempi kuin 18 vuotta, niin
muuttujaan adult kirjoitetaan true,
kuten pitääkin, mutta jos ikä on pienempi kuin
18, niin muuttuja adult saa
arvon undefined. Korjaa koodin authorin virhe.
Tässä on ongelmallinen koodi:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Alla olevan koodin authori halusi suorittaa
ikätarkistuksen. Kodi kuitenkin tulostaa konsoliin
arvon undefined riippumatta iän arvosta.
Korjaa koodin authorin virhe.
Tässä on ongelmallinen koodi:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = '18-23';
} else {
let res = 'yli 23';
}
} else {
let res = 'alle 18';
}
console.log(res);
Alla olevan koodin authori halusi suorittaa
ikätarkistuksen. Kodi kuitenkin tulostaa konsoliin
arvon undefined, kun ikä on suurempi kuin 18 vuotta. Korjaa
koodin authorin virhe.
Tässä on ongelmallinen koodi:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = '18-23';
} else {
res = 'yli 23';
}
} else {
res = 'alle 18';
}
console.log(res);