Zakres zmiennych w if-else w JavaScript

Dla uproszczenia załóżmy, że mamy zawsze spełniony warunek:

javascriptif (true) {
  
}

Przyjrzyjmy się następującemu kodowi:

javascriptif (true) {
  let res = '!';
}

console.log(res);

Jak widzisz, do zmiennej res powinna zostać zapisana wartość '!'. Jednakże, jeśli uruchomimy ten kod, w konsoli pojawi się błąd!

Chodzi o to, że zmienne zadeklarowane wewnątrz nawiasów klamrowych są widoczne tylko wewnątrz tych nawiasów i nie są widoczne na zewnątrz. Mówiąc naukowo, chodzi tutaj o zakres widoczności zmiennych.

Można powiedzieć, że zakresem widoczności zmiennych zadeklarowanych wewnątrz nawiasów klamrowych są tylko te nawiasy klamrowe. Jednakże, jeśli zmienna jest zadeklarowana na zewnątrz nawiasów klamrowych, to jest widoczna zarówno wewnątrz nich, jak i na zewnątrz:

javascriptlet res; // zmienna zadeklarowana na zewnątrz

if (true) {
  res = '!';
}

console.log(res); // wypisze '!'

W następnym przykładzie do zmiennej res w zależności od warunku zapisywana jest albo wartość 1, albo wartość 2:

javascriptlet num = 5;

if (num >= 0) {
  let res = 1;
} else {
  let res = 2;
}

console.log(res);

Jednakże, jeśli uruchomimy ten kod, to w konsoli pojawi się błąd. Jak już teraz rozumiesz, winny jest zakres widoczności zmiennych. Aby rozwiązać problem, zadeklarujmy zmienną na zewnątrz warunku:

javascriptlet test = true;
let res; // deklarujemy zmienną na zewnątrz warunku

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

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

Autor poniższego kodu chciał wykonać sprawdzenie wieku na osiągnięcie 18 lat. Kod jednak nie działa. Popraw błąd autora kodu. Oto problematyczny kod:

javascriptlet age = 17;

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

console.log(adult);