JavaScript
Czyli, jak ruda stronę www tworzyła?

JavaScript

...

JavaScript - Deklaracja zmiennej

Zmienna - definicja

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

Zmienna w JavaScript - właściwości

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.

Skrypt przykładowy pokazujący wykorzystanie zmiennych oraz ich zasięg.

˂script˃

/*Poniżej deklaracja funkcji 'MojaFunkcja'*/

function MojaFunkcja()
{
var NowaZmienna03 = ("Nowa zmienna zadeklarowana przez instrukcję var wewnątrz funkcji);
NowaZmienna04 = "Nowa zmienna zadeklarowana poprzez przypisanie wewnątrz funkcji";
dokument.write (NowaZmienna04);
dokument.write (NowaZmienna03);
document.write ("Funkcja 'MojaFunkcja' wypisała wartość zmiennych - NowaZmienna04, NowaZmienna03");
}

/*Koniec deklaracji funkcji*/
/*Została zadeklarowana funkcja o nazwie "MojaFunkcja". Wewnątrz tej funkcji zadeklarowano dwie zmienne NowaZmienna03 oraz NowaZmienna04. MojaZmienna03 została zadeklarowana przy użyciu instrukcji var wewnątrz funkcji. Ma więc charakter lokalny. NowaFunkcja04 została również zadeklarowana wewnątrz funkcji, ale przez podstawienie. Posiada więc charakter globalny. Wewnątrz funkcji znajdują się jeszcze trzy polecenia wydruku realizowane przy pomocy metody write dla obiektu document z których dwa pierwsze wypisują wartości zadeklarowanych wewnątrz funkcji zmiennych, a trzeci jest wyświetlaną, opisową formą komentarza wykonanych czynności.*/

var NowaZmienna01;

/*Została zadeklarowana zmienna o nazwie "NowaZmienna01". Nie przypisano jej żadnej wartości, a więc zmiennej "NowaZmienna01" została przypisana wartość "undefined". "NowaZmienna01" nie znajduje się w obrębie definicji funkcji posiada więc charakter globalny*/

var NowaZmienna02 = 123;

/*Została zadeklarowana zmienna o nazwie "NowaZmienna02". Przypisano jej wartość liczbową 123. "NowaZmienna02 podobnie jak "NowaZmienna01" nie znajduje się w obrębie definicji funkcji, pomimo więc, że została zdefiniowana przy użyciu polecenia var posiada charakter globalny"*/

document.write ("Poniżej widzimy wynik działania kodu"+"˂br/˃");

/*Wydruk zmiennych NowaZmienna01 oraz NowaZmienna02 zadeklarowanych poza funkcją*/

dokument.write (NowaZmienna01+"˂br/˃");
dokument.write (NowaZmienna02+"˂br/˃");
document.write ("˂hr/˃");

/*Pomiędzy dwoma liniami poziomymi mamy wydrukowany efekt wykonania funkcji "MojaFunkcja"*/

MojaFunkcja();
document.write ("˂hr/˃");
document.write (NowaZmienna04+"˂br/˃");
document.write ("To powyżej jeszcze wyświetliłem"+"˂br/˃");
document.write ("Ale ostatnich dwóch linijek kodu jeż nie"+"˂br/˃");

document.write (NowaZmienna03+"˂br/˃");
document.write ("KONIEC WYKONYWANIA KODU"+"˂br/˃");

˂/script˃

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.

Sposoby deklarowania zmiennych przez podstawienie

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:

˂script˃
/*Poniżej deklaracja funkcji 'MojaFunkcja'*/
function MojaFunkcja()
{
var NowaZmienna02 = NowaZmienna01 = 10;
dokument.write ("NowaZmienna01 = "+NowaZmienna01+"˂br/˃");
dokument.write ("NowaZmienna02 = "+NowaZmienna02"+˂br/˃");
document.write ("Funkcja 'MojaFunkcja' wypisała wartość zmiennych - NowaZmienna01, NowaZmienna02
");
}
/*Poniżej skrypt wykonuje funkcję 'MojaFunkcja', a następnie wypisuje zawartość zmiennych zadeklarowanych w obrębie funkcji*/
MojaFunkcja01();
document.write ("NowaZmienna01 (wydruk poza funkcją) = "+NowaZmienna01+"˂br/˃")
document.write ("NowaZmienna01 (wydruk poza funkcją) = "+NowaZmienna02+"˂br/˃")
document.write ("KONIEC WYKONYWANIA KODU"+"˂br/˃");

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.

Sposoby deklarowania zmiennych przy użyciu instrukcji var

Oto podstawowe sposoby deklarowania zmiennych przy użyciu instrukcji var:

var NowaZmienna01;// Deklaracja zmiennej bez przypisania wartości zmiennej zostaje przypisana wartość "undefined"
var NowaZmienna02 = "Thomas Jefferson";// Zmiennej zostaje przypisany ciąg znaków
var Nazwa = "Zielony duszek",Wiek = 42, Licznik;// Przy użyciu jednej instrukcji var zadeklarowaliśmy trzy różne zmienne
var InnaZmienna = JakasFunkcja();// Deklaracja zmiennej przy użyciu funkcji. Wartością zmiennej zostaje wynik działania funkcji