...
Zmienna to konstrukcja programistyczna posiadająca trzy podstawowe atrybuty:
- symboliczną nazwę
- miejsce przechowywania
- wartość, która może się zmieniać w trakcie działania programu
Zmienne tworzone w języku JavaScript mogą przechowywać dane wszystkich dostępnych typów.
JavaScript rozróżnia w nazwach zmiennych wielkość liter. Pierwszy znak musi być literą ASCII, (małe i wielkie) lub znakiem podkreślenia (_). Należy zauważyć, że nie można użyć cyfry jako pierwszego znaku. Kolejne znaki muszą być literami, cyframi lub znakami podkreślenia (_). Nazwą zmiennej nie może być słowo zarezerwowane przez język jako nazwa instrukcji, wbudowanego obiektu, metody, lub funkcji.
W JavaScript nie ma konieczności wcześniejszej deklaracji zmiennej. Można to zrobić w dowolnym miejscu kodu. Deklarując funkcję możemy, ale nie musimy przypisać jej jakąś wartość. Jeżeli nie przypiszemy zmiennej żadnej wartości wstępnie przybiera ona wartość undefined.
Deklaracja funkcji w języku JavaScript jest możliwa na dwa sposoby. Pierwszy z nich to użycie polecenia var. Drugi polega na bezpośrednim przypisaniu wartości do zmiennej.
W Java Script zadeklarowane zmienne są zmiennymi globalnymi za wyjątkiem zmiennych deklarowanych przy użyciu polecenia var w obrębie funkcji. Taka zmienna ma charakter lokalny i jest widoczna wyłącznie w obrębie funkcji w której została zadeklarowana. Jeżeli w obrębie funkcji zmienna zostanie zadeklarowana przez przypisanie to pomimo, że deklaracja znajduje wewnątrz funkcji zmienna będzie miała charakter globalny.
Poniżej, w ramce widzimy efekt wykonania powyższego skryptu. Należy zwrócić uwagę, że nie zostały wykonane dwie ostatnie linie kodu zaznaczone w listingu skryptu kolorem zielonym. Stało się tak dlatego, że próba odwołania się do zmiennej "NowaZmienna03" zakończyła się błędem. "NowaZmienna03" została zadeklarowana przy użyciu instrukcji var wewnątrz funkcji, a co za tym idzie jest zmienną lokalną widoczną wyłącznie wewnątrz funkcji "MojaFunkcja". Próba odwołania się do niej poza funkcją wywołała błąd, skutkujący przerwaniem wykonywania skryptu.
Jak już wcześniej pokazałem deklaracja zmiennej przez podstawienie jest możliwa w dowolnym miejscu kodu, a zmienna utworzona w taki sposób, niezależnie od miejsca w którym powstała ma charakter globalny. I na tym moglibyśmy poprzestać gdyby nie pewna specyficzna właściwość języka JavaScript, którą przedstawię na przykładzie poniższego skryptu:
Przeanalizujmy wynik wykonania powyższego skryptu zawarty w ramce poniżej. Pierwsze trzy linijki to wynik wykonania kodu w obrębie funkcji "MojaFunkcja01". Obie zmienne przyjęły wartość dziesięć i ich wartość została wyświetlona przy użyciu metody write dla obiektu document. Informacja o tym fakcie została wyświetlona w kolejnej linii. Kolejne linie wymagają wyjaśnienia.
"NowaZmienna01" została wyświetlona prawidłowo poza ciałem funkcji pomimo, że do jej deklaracji użyliśmy instrukcji var.
Stało się tak dlatego, że kod w liniach JavaScript jest odczytywany od prawej do lewej. W rezultacie zmiennej "NowaZmienna01" zostaje w pierwszej kolejności przypisana wartość 10. I jest to przypisanie wartości przez podstawienie, a co za tym idzie "NowaZmienna01" stała się zmienną globalną. Natomiast przypisanie do zmiennej "NowaZmienna02" wartości uprzednio nadanej przez podstawienie zmiennej "NowaZmienna01" jest już interpretowane jako nadanie zmiennej wartości przy użyciu instrukcji var
w obrębie funkcji i powoduje, że zmienna "NowaZmienna02" przyjmuje wartość 10 (równą "NowaZmienna01"), ale staje się zmienną lokalną. Podsumowując: zmienna "NowaZmienna01" jest poza funkcją normalnie wyświetlana jako zmienna globalna. Natomiast próba wyświetlenia zmiennej "NowaZmienna02" daje nieoczekiwany wynik 123. Dzieje się tak dlatego, że w poprzednim skrypcie
"NowaZmienna02" została nadana wartość 123. Ponieważ zmienna ta została zadeklarowana jako globalna jest widoczna w całym dokumencie, we wszystkich skryptach.
Oto podstawowe sposoby deklarowania zmiennych przy użyciu instrukcji var: