Нюансы области видимости переменных в конструкциях if-else в JavaScript

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

javascriptlet res = 1;

if (true) {
  res = 2;
}

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

Как вы видите, переменная res поменялась внутри условия. Все, однако, поменяется, если внутри условия также объявить переменную res через let:

javascriptlet res = 1;

if (true) {
  let res = 2; // объявим переменную через let
}

console.log(res); // выведет 1, а не 2!

Здесь все дело в том, что объявление переменой через let внутри условия создало локальную переменную res.

To есть внутри условия существует одна переменная res, а снаружи условия - другая. Убедится в этом можно, выведя значение переменной в консоль внутри условия:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // выведет 2
}

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

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

javascriptlet age = 17;
let adult;

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

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

Автор приведенного ниже кода хотел выполнить проверку возраста на достижение 18 лет. После проверки кода оказалось, что если возраст равен или больше 18 лет, то в переменную adult записывается true, как и должно быть, однако, если возраст меньше 18, то переменная adult имеет значение undefined. Исправьте ошибку автора кода.

Вот проблемный код:

javascriptlet age = 17;
let adult;

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

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

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

Вот проблемный код:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = 'от 18 до 23';
  } else {
    let res = 'больше 23';
  }
} else {
  let res = 'меньше 18';
}

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

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

Вот проблемный код:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = 'от 18 до 23';
  } else {
    res = 'больше 23';
  }
} else {
  res = 'меньше 18';
}

console.log(res);