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

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

javascriptlet num = 1; // глобальная переменная

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

console.log(num); // выведет 1 - глобальная переменная не поменялась

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

javascriptlet num = 1;

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

console.log(num); // выведет 2 - переменная поменялась

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

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

Задание 1

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

javascriptlet num = 1;

function func() {
  num = 2;
}
func();

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

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

javascriptlet num = 1;

function func() {
  let num = 2;
}
func();

console.log(num);