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:

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

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

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // skriver ut 2
}

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

javascriptlet age = 17;
let adult;

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

console.log(adult);
Задание 2

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:

javascriptlet age = 17;
let adult;

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

console.log(adult);
Задание 3

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:

javascriptlet 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);
Задание 4

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:

javascriptlet 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);