Область видимости переменных в if-else в JavaScript

Пусть для простоты у нас есть всегда выполняющееся условие:

javascriptif (true) {
  
}

Давайте рассмотрим следующий код:

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

console.log(res);

Как вы видите, в переменную res должно записаться значение '!'. Однако, если запустить этот код, то в консоль выведется ошибка!

Дело в том, что переменные, объявленные внутри фигурных скобок, видны только внутри этих скобок, и не видны снаружи. По-научному здесь идет речь об области видимости переменных.

Можно говорить о том, что областью видимости переменных, объявленных внутри фигурных скобок, являются только эти фигурные скобки. Однако, если переменная объявлена снаружи фигурных скобок, то видна и внутри них, и снаружи:

javascriptlet res; // переменная объявлена снаружи

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

console.log(res); // выведет '!'

В следующем примере в переменную res в зависимости от условия записывается либо значение 1, либо значение 2:

javascriptlet num = 5;

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

console.log(res);

Однако, если запустить этот код, то в консоль выведется ошибка. Как вы теперь уже понимаете, все дело в видимости переменных. Для решения проблемы объявим переменную снаружи условия:

javascriptlet test = true;
let res; // объявим переменную снаружи условия

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

console.log(res); // выведет 1
Задание 1

Автор приведенного ниже кода хотел выполнить проверку возраста на достижение 18 лет. Код, однако, не работает. Исправьте ошибку автора кода. Вот проблемный код:

javascriptlet age = 17;

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

console.log(adult);