Identyczne nazwy zmiennych w funkcjach w JavaScript

Jeśli zarówno na zewnątrz funkcji, jak i wewnątrz niej istnieje zmienna num. W tym przypadku jakiekolwiek zmiany ze zmienną lokalną num nie mają wpływu na zmienną globalną num:

javascriptlet num = 1; // zmienna globalna

function func() {
  let num = 2; // zmienna lokalna
  console.log(num);
}
func(); // wywołujemy funkcję, wypisze 2

console.log(num); // wypisze 1 - zmienna globalna nie zmieniła się

Ale jeśli zapomnimy zadeklarować zmienną lokalną num przez let, to wewnątrz funkcji nie utworzy się zmienna lokalna num, a po prostu zmieni się zmienna globalna:

javascriptlet num = 1;

function func() {
  num = 2; // zapomnieliśmy napisać let - zmieniamy zmienną zewnętrzną
  console.log(num);
}
func(); // wywołujemy funkcję, wypisze 2

console.log(num); // wypisze 2 - zmienna się zmieniła

Mogą tu zaistnieć dwie sytuacje: albo naprawdę chcieliśmy zmienić zmienną globalną (wtedy wszystko w porządku), albo zapomnieliśmy o let i przypadkowo zmieniliśmy zmienną globalną.

Drugi przypadek jest trudnym do wykrycia błędem, prowadzącym do nieprzewidywalnego zachowania skryptu. Dlatego zawsze, wprowadzając nową zmienną, deklaruj ją przez let.

Задание 1

Określ, bez uruchamiania kodu, co zostanie wypisane w konsoli:

javascriptlet num = 1;

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

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

Określ, bez uruchamiania kodu, co zostanie wypisane w konsoli:

javascriptlet num = 1;

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

console.log(num);