Při tvorbě jednoho projektu jsem se chvíli zaseknul na práci s JavaScriptem, kdy mi některé proměnné neobsahovaly správné hodnoty. Nejdříve jsem myslel, že se do nich přiřazuje nesprávná hodnota. Nakonec jsem ale zjistil, že se jedná o problém s globálností.
Při definování proměnných v javascriptu totiž můžete narazit na globální proměnné, které prohlížeč automaticky sám nastavuje. A to je například případ zrovna proměnné top. Pokud proměnnou definujete mimo funkci s použitím var, pak ji bez var nastavujete a nakonec chcete vypsat, tak se nedostáváte ke "své" proměnné, ale k proměnné od prohlížeče.
var top = 2; test(); test2(); test3(); function test() { top = 3; alert(top); // vypíše [object Window] } function test2() { alert(top); // vypíše [object Window] } function test3() { var top = 2; alert(top); // vypíše 2 }
Pro použití v nějaké funkci je řešením definování pomocí var a v případě požadavku na globální proměnnou je potřeba použít jiný název proměnné. Do problémů se pak můžete dostat i s jinými názvy - je tedy lepší se vyhnout anglických názvům, které by mohly mít souvislost s prohlížečem.
Více si o tom můžete přečíst na následujících stránkách: