Variablers omfattning i if-else i JavaScript
Låt oss för enkelhetens skull ha ett villkor som alltid utförs:
if (true) {
}
Låt oss titta på följande kod:
if (true) {
let res = '!';
}
console.log(res);
Som du ser, i variabeln res
borde värdet '!' ha lagrats. Men,
om du kör den här koden kommer ett
fel att skrivas ut i konsolen!
Saken är den att variabler deklarerade inuti klammerparenteser, endast är synliga inuti dessa parenteser, och inte synliga utanför. Vetenskapligt sett handlar det här om variablers omfattning.
Man kan säga att omfattningen för variabler deklarerade inuti klammerparenteser, endast är dessa klammerparenteser. Men, om en variabel är deklarerad utanför klammer- parenteserna, är den synlig både inuti dem och utanför:
let res; // variabel deklarerad utanför
if (true) {
res = '!';
}
console.log(res); // skriver ut '!'
I följande exempel i variabeln res
skrivs antingen värdet 1 eller värdet 2 beroende på villkoret:
let num = 5;
if (num >= 0) {
let res = 1;
} else {
let res = 2;
}
console.log(res);
Men om du kör den här koden kommer ett fel att skrivas ut i konsolen. Som du nu förstår, handlar det allt om variablers synlighet. För att lösa problemet deklarerar vi variabeln utanför villkoret:
let test = true;
let res; // deklarera variabeln utanför villkoret
if (test) {
res = 1;
} else {
res = 2;
}
console.log(res); // skriver ut 1
Författaren till koden nedan ville utföra
en ålderkontroll för att uppnå 18
år. Koden fungerar dock inte. Rättaa
kodförfattarens fel. Här är den problematiska koden:
let age = 17;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);