# Одинаковые имена переменных в функциях в JavaScript

Пусть и снаружи функции, и внутри есть переменная `num`. В этом случае любые изменения с локальной переменной `num` никак не влияют на глобальную переменную `num`:

`let num = 1; // глобальная переменная function func() { let num = 2; // локальная переменная console.log(num); } func(); // вызываем функцию, выведет 2 console.log(num); // выведет 1 - глобальная переменная не поменялась`

Но, если мы забудем объявить локальную переменную `num` через `let`, то внутри функции не создастся локальная переменная `num`, а просто изменится глобальная переменная:

`let num = 1; function func() { num = 2; // забыли написать let - меняем внешнюю переменную console.log(num); } func(); // вызываем функцию, выведет 2 console.log(num); // выведет 2 - переменная поменялась`

Тут может быть две ситуации: или мы действительно хотели поменять глобальную переменную (тогда все ок), или мы забыли `let` и случайно поменяли глобальную переменную.

Второй случай является трудноуловимой ошибкой, ведущей к непредсказуемому поведению скрипта. Поэтому всегда, вводя новую переменную объявляйте ее через `let`.

Определите, не запуская код, что выведется в консоль:

`let num = 1; function func() { num = 2; } func(); console.log(num);`

Определите, не запуская код, что выведется в консоль:

`let num = 1; function func() { let num = 2; } func(); console.log(num);`
← →
↑
en ru