Nyanser av variablers omfattning i if-else-konstruktioner i JavaScript
Variablers omfattning har en viss
nyans. Låt oss undersöka den med ett exempel.
Låt oss deklarera variabeln res utanför vårt villkor med ett värde,
och inuti villkoret ändra detta värde till ett annat:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // skriver ut 2
Som du ser ändrades variabeln res
inuti villkoret. Allt förändras dock
om man även deklarerar variabeln
res inuti villkoret via let:
let res = 1;
if (true) {
let res = 2; // deklarera variabeln via let
}
console.log(res); // skriver ut 1, inte 2!
Här handlar allt om att deklarationen av variabeln
via let inuti villkoret skapade en lokal
variabel res.
Det vill säga, inuti villkoret finns en variabel
res, och utanför villkoret - en annan.
Man kan övertyga sig om detta genom att skriva ut variabelns värde
i konsollen inuti villkoret:
let res = 1;
if (true) {
let res = 2;
console.log(res); // skriver ut 2
}
console.log(res); // skriver ut 1
Författaren till koden nedan ville utföra
en kontroll av ålder för att uppnå 18
år. Koden skriver dock ut värdet
undefined i konsollen oavsett åldervärde.
Rätta författarens kodfel. Här är den problematiska koden:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Författaren till koden nedan ville utföra
en kontroll av ålder för att uppnå 18
år. Efter att ha kontrollerat koden visade det sig att om
åldern är lika med eller större än 18 år, så
skrivs true in i variabeln adult,
som det ska vara, men om åldern är mindre än
18, har variabeln adult
värdet undefined. Rätta författarens
kodfel.
Här är den problematiska koden:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Författaren till koden nedan ville utföra
en ålderskontroll. Koden skriver dock ut
värdet undefined i konsollen oavsett
åldervärde. Rätta författarens kodfel.
Här är den problematiska koden:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'från 18 till 23';
} else {
let res = 'mer än 23';
}
} else {
let res = 'mindre än 18';
}
console.log(res);
Författaren till koden nedan ville utföra
en ålderskontroll. Koden skriver dock ut
värdet undefined i konsollen när åldervärdet
är större än 18 år. Rätta författarens
kodfel.
Här är den problematiska koden:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'från 18 till 23';
} else {
res = 'mer än 23';
}
} else {
res = 'mindre än 18';
}
console.log(res);