Еднакви имена на променливи във функции в 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);