Wpisy otagowane ‘zasięg zmiennych’

Jaki jest zasięg zmiennych w JavaScript

wtorek, 12 Czerwiec 2012

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.