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

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

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

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

`let res = 1; if (true) { let res = 2; // объявим переменную через let } console.log(res); // выведет 1, а не 2!`

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

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

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

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

`let age = 17; let adult; if (age >= 18) { let adult = true; } else { let adult = false; } console.log(adult);`

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

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

`let age = 17; let adult; if (age >= 18) { adult = true; } else { let adult = false; } console.log(adult);`

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

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

`let 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);`

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

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

`let age = 19; let res; if (age >= 18) { let res; if (age <= 23) { res = 'от 18 до 23'; } else { res = 'больше 23'; } } else { res = 'меньше 18'; } console.log(res);`
←→
↑
en ru