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:
let 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:
let 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.
Określ, bez uruchamiania kodu, co zostanie wypisane w konsoli:
let num = 1;
function func() {
num = 2;
}
func();
console.log(num);
Określ, bez uruchamiania kodu, co zostanie wypisane w konsoli:
let num = 1;
function func() {
let num = 2;
}
func();
console.log(num);