Variablers omfattning i if-else i JavaScript

Låt oss för enkelhetens skull ha ett villkor som alltid utförs:

javascriptif (true) {
  
}

Låt oss titta på följande kod:

javascriptif (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:

javascriptlet 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:

javascriptlet 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:

javascriptlet test = true;
let res; // deklarera variabeln utanför villkoret

if (test) {
  res = 1;
} else {
  res = 2;
}

console.log(res); // skriver ut 1
Задание 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:

javascriptlet age = 17;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

console.log(adult);