Variablers rækkevidde i if-else i JavaScript
Lad os for enkelheds skyld have en betingelse, der altid udføres:
if (true) {
}
Lad os se på følgende kode:
if (true) {
let res = '!';
}
console.log(res);
Som du kan se, skal variablen res
tilskrives værdien '!'. Men
hvis du kører denne kode, vil der vises
en fejl i konsollen!
Grunden er, at variabler, deklareret inden for krøllede parenteser, kun er synlige inde i disse parenteser og ikke er synlige udenfor. Videnskabeligt set taler vi her om variablers rækkevidde.
Man kan sige, at rækkevidden for variabler deklareret inde i krøllede parenteser kun er disse krøllede parenteser. Men hvis en variabel er deklareret uden for de krøllede parenteser, er den synlig både inde i dem og udenfor:
let res; // variabel deklareret udenfor
if (true) {
res = '!';
}
console.log(res); // vil udskrive '!'
I det næste eksempel tildeles variablen res
enten værdien 1 eller værdien 2 afhængigt af
betingelsen:
let num = 5;
if (num >= 0) {
let res = 1;
} else {
let res = 2;
}
console.log(res);
Men hvis du kører denne kode, vil der opstå en fejl i konsollen. Som du nu forstår, skyldes det variablers rækkevidde. For at løse problemet deklarerer vi variablen uden for betingelsen:
let test = true;
let res; // deklarer variablen uden for betingelsen
if (test) {
res = 1;
} else {
res = 2;
}
console.log(res); // vil udskrive 1
Forfatteren af koden nedenfor ønskede at udføre
en alderskontrol for at opnå 18
år. Koden fungerer dog ikke. Ret
fejlen i forfatterens kode. Her er den problematiske kode:
let age = 17;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);