Nyanser av variabel skop i if-else konstruksjoner i JavaScript
Variabel skop har en del
nyanser. La oss se på det med et eksempel.
La oss deklarere en variabel
res med en verdi på utsiden av vår betingelse, og inne i
betingelsen endre denne verdien til en annen:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // vil skrive ut 2
Som du ser, variabelen res ble endret
inni betingelsen. Alt forandrer seg imidlertid,
hvis vi også deklarerer variabelen
res via let inne i betingelsen:
let res = 1;
if (true) {
let res = 2; // deklarerer variabel via let
}
console.log(res); // vil skrive ut 1, ikke 2!
Her handler det om at deklarasjon av variabel
via let inne i betingelsen skapte en lokal
variabel res.
Det vil si at inne i betingelsen finnes en variabel
res, og utenfor betingelsen - en annen.
Du kan overbevise deg om dette ved å skrive ut verdien av variabelen
i konsollen inne i betingelsen:
let res = 1;
if (true) {
let res = 2;
console.log(res); // vil skrive ut 2
}
console.log(res); // vil skrive ut 1
Forfatteren av koden nedenfor ønsket å utføre
en sjekk av alder for å oppnå 18
år. Koden skriver imidlertid ut verdien
undefined i konsollen uansett hvilken alder som er satt.
Retts opp i feilen forfatteren av koden har gjort. Her er den problematiske koden:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Forfatteren av koden nedenfor ønsket å utføre
en sjekk av alder for å oppnå 18
år. Etter å ha sjekket koden viste det seg at hvis
alderen er lik eller større enn 18 år, så
blir true skrevet til variabelen adult,
slik det skal være, derimot hvis alderen er mindre
enn 18, har variabelen adult
verdien undefined. Retts opp i feilen
forfatteren av koden har gjort.
Her er den problematiske koden:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Forfatteren av koden nedenfor ønsket å utføre
en alderssjekk. Koden skriver imidlertid ut
undefined i konsollen uansett
alder. Retts opp i feilen forfatteren av koden har gjort.
Her er den problematiske koden:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'fra 18 til 23';
} else {
let res = 'mer enn 23';
}
} else {
let res = 'mindre enn 18';
}
console.log(res);
Forfatteren av koden nedenfor ønsket å utføre
en alderssjekk. Koden skriver imidlertid ut
undefined i konsollen når alderen
er større enn 18 år. Retts opp i feilen forfatteren av koden har gjort.
Her er den problematiske koden:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'fra 18 til 23';
} else {
res = 'mer enn 23';
}
} else {
res = 'mindre enn 18';
}
console.log(res);