Zmienne globalne w funkcjach w JavaScript
W JavaScript (w innych językach najczęściej nie jest tak) zmienne zdefiniowane na zewnątrz funkcji będą widoczne wewnątrz tej funkcji. Takie zmienne nazywane są globalnymi. Spójrzmy na przykład:
let num = 1; // zmienna na zewnątrz funkcji
function func() {
console.log(num); // zmienna num jest widoczna wewnątrz funkcji
}
func(); // wypisze 1
W rzeczywistości zmienna musi być zdefiniowana nie przed definicją funkcji, ale przed jej wywołaniem:
function func() {
console.log(num);
}
let num = 1; // zmienna na zewnątrz funkcji
func(); // wypisze 1
Jeśli zmieniamy wartość zmiennej i po tym
za każdym razem wywołujemy funkcję - console.log
za każdym razem będzie wypisywał różne wyniki:
function func() {
console.log(num);
}
let num; // deklarujemy zmienną
num = 1; // ustawiamy wartość 1
func(); // wypisze 1
num = 2; // ustawiamy wartość 2
func(); // wypisze 2
Jeśli mamy kilka funkcji, to zmienna globalna będzie dostępna w każdej z tych funkcji:
function func1() {
console.log(num);
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // wypisze 1
func2(); // wypisze 1
Jeśli w jednej z funkcji nastąpią zmiany ze zmienną globalną, to ta zmienna zmieni się we wszystkich funkcjach, używających tej zmiennej:
function func1() {
console.log(num);
num++; // zmieniamy zmienną globalną
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // wypisze 1
func2(); // wypisze 2
Ponieważ dowolna z funkcji łatwo może zmienić zmienną globalną, to ich użycie stanowi wylęgarnię trudnych do wychwycenia błędów. Z tego powodu używanie zmiennych globalnych w skrypcie należy ograniczać do minimum. Pożądane jest, aby w ogóle ich nie było lub było ich najmniej.
Określ, nie uruchamiając kodu, co zostanie wypisane w konsoli:
let num = 1;
function func() {
console.log(num);
}
func();
Określ, nie uruchamiając kodu, co zostanie wypisane w konsoli:
let num = 1;
function func() {
console.log(num);
}
num = 2;
func();
Określ, nie uruchamiając kodu, co zostanie wypisane w konsoli:
function func() {
console.log(num);
}
let num;
num = 1;
func();
num = 2;
func();