Zasięg zmiennych w JavaScript może dla niektórych okazać się zaskakujący. Wystarczy jednak uruchomić poniższy kod, by wszystko stało się jasne.
<html> <script type="text/javascript"> var a=1; var b=2; var c=3; zasieg(a); function zasieg(a) { var b; a++; b++; c++; alert(a+' '+b+' '+c); } alert(a+' '+b+' '+c); </script> </html> |
Każda z wymienionych trzech zmiennych zachowuje się inaczej. Zmienna a z początkową wartością 1 jest przekazana do funkcji zasieg() jako argument. W związku z tym wewnątrz funkcji jest zmienną lokalną. Inkrementacja tej zmiennej wewnątrz funkcji nie wpływa na wartość zmiennej a poza funkcją. Pierwsza instrukcja alert(a+’ ‘+b+’ ‘+c) wyświetli wartość 2 dla zmiennej a, natomiast druga - wartość 1.
Zmienna b jest ponownie tworzona wewnątrz funkcji, wobec czego jest to całkowicie nowa zmienna i nie posiada wartości, a więc nie podlega również inkrementacji. Instrukcja alert(a+’ ‘+b+’ ‘+c) wewnątrz funkcji wyświetli dla zmiennej b NaN (not a number – wartość nie numeryczna). Natomiast poza funkcją wartością zmiennej b będzie niezmiennie 2.
Zmienna c nie jest ani przekazywana do funkcji zasieg() jako argument, ani nie jest tworzona wewnątrz tej funkcji. Wartością początkową zmiennej c jest 3. Wewnątrz funkcji zasieg() ta zmienna jest nadal dostępna. W języku JavaScript zmienne, które nie są przekazane do funkcji jako argumenty, ani nie były utworzone wewnątrz funkcji słowem var, a istniały poza funkcją, automatycznie stają się wewnątrz funkcji zmiennymi globalnymi. Zmiany wartości zmiennej c, które zajdą wewnątrz funkcji, będą też widoczne poza tą funkcją. Obydwie instrukcje alert(a+’ ‘+b+’ ‘+c) wyświetlą tę samą wartość zmiennej c.