Niuanse zakresu zmiennych w konstrukcjach if-else w JavaScript

Zakres zmiennych ma pewien niuans. Przyjrzyjmy się mu na przykładzie. Zadeklarujmy na zewnątrz naszego warunku zmienną res z jedną wartością, a wewnątrz warunku zmieńmy tę wartość na inną:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // wypisze 2

Jak widać, zmienna res zmieniła się wewnątrz warunku. Wszystko jednak się zmieni, jeśli wewnątrz warunku również zadeklarujemy zmienną res przez let:

javascriptlet res = 1;

if (true) {
  let res = 2; // zadeklarujmy zmienną przez let
}

console.log(res); // wypisze 1, a nie 2!

Tutaj chodzi o to, że deklaracja zmiennej przez let wewnątrz warunku stworzyła lokalną zmienną res.

Czyli wewnątrz warunku istnieje jedna zmienna res, a na zewnątrz warunku - inna. Można się o tym przekonać, wypisując wartość zmiennej do konsoli wewnątrz warunku:

javascriptlet res = 1;

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

console.log(res); // wypisze 1
Задание 1

Autor poniższego kodu chciał wykonać sprawdzenie wieku na osiągnięcie 18 lat. Kod jednak przy dowolnej wartości wieku wypisuje do konsoli wartość undefined. Popraw błąd autora kodu. Oto problematyczny kod:

javascriptlet age = 17;
let adult;

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

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

Autor poniższego kodu chciał wykonać sprawdzenie wieku na osiągnięcie 18 lat. Po sprawdzeniu kodu okazało się, że jeśli wiek jest równy lub większy niż 18 lat, to do zmiennej adult zostaje zapisane true, jak powinno być, jednakże jeśli wiek jest mniejszy niż 18, to zmienna adult ma wartość undefined. Popraw błąd autora kodu.

Oto problematyczny kod:

javascriptlet age = 17;
let adult;

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

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

Autor poniższego kodu chciał wykonać sprawdzenie wieku. Kod jednak przy dowolnej wartości wieku wypisuje do konsoli wartość undefined. Popraw błąd autora kodu.

Oto problematyczny kod:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = 'od 18 do 23';
  } else {
    let res = 'więcej niż 23';
  }
} else {
  let res = 'mniej niż 18';
}

console.log(res);
Задание 4

Autor poniższego kodu chciał wykonać sprawdzenie wieku. Kod jednak przy wartości wieku większej niż 18 lat wypisuje do konsoli wartość undefined. Popraw błąd autora kodu.

Oto problematyczny kod:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = 'od 18 do 23';
  } else {
    res = 'więcej niż 23';
  }
} else {
  res = 'mniej niż 18';
}

console.log(res);