JavaScript var változó használata?
(Nem JavaScripteztem de úgylátom hasonló mint pascal- és c-ben.)
A lokális (helyi) és globális (általános) változók a var kulcsszóval deklarálunk.
A program ezeket úgy használja, hogy ha futás közben találkozik egy betűvel, akkor először megnézi definiálva van-e lokálisan (a függvényed elején), ha nincs, akkor a globálisak között keresi (a program elején).
A lokális változók használata az átláthatósághoz fontos, hiszen:
-Párszáz soros programnál ki emlékszik arra hogy mit jelölt korábban a LocMaxI_2 nevű változóval és hol használta. Így csak egy függvényben kell keresgélni.
-Ugyanazt a nevet használhatod különböző függvényekben, akár különböző adattípus tárolására. Nem zavarják meg egymás értékét.
JavaScriptben létezik a "re-declaring", ami egy függvényen belül semmire nem jó.
(var x=5;
...
var x;)
JavaScriptben a var kulcsszóval lehet változót deklarálni ( = bejelenteni, létrehozni), sehogyan máshogyan nem. Tegyük fel, hogy valahol szükséged van egy "x" nevű változóra, ami a "valtozo" stringet tárolja. Ezt csinálod:
var x = 'valtozo'
A var julcsszó önmagában NEM határozza meg, hogy a változód globális vagy lokális.
Ha a fenti sort a "nagy semmibe" írod, tehát függvényeken kívül, csak bele a fájlba valahova, akkor ezzel egy globális változót hozol létre, ami minden függvény számára elérhető lesz, hiszen nem írtad bele specifikusan egybe. Ha bárhol írsz például egy alert(x)-et, akkor az alert (felugró figyelmeztetés) azt fogja kiírni, hogy "valtozo".
Ha a sort egy függvényen belül írod, így, akkor más történik:
function () {
var x = 'valtozo'
}
alert(x)
A névtelen függvényen belül deklaráltál egy x változót, és ezen a függvényen kívül szeretnéd elérni. Nem fog menni. A JavaScriptben semmi nem lát kívülről bele más dolgokba, viszont belülről kifelé minden mindent lát. :) Szóval az alábbi kód az előzővel szemben már el fogja érni az x változódat:
var x = 'valtozo'
function () {
alert(x)
}
És mi van, ha elhagyod a var szócskát?
Ha elhagyod, a JavaScript úgy fogja értelmezni, hogy egy már korábban deklarált változóra hivatkozol, és annak az értékét próbálod épp megváltoztatni 'valtozo'-ra, bármi is volt ez az érték korábban. Ezért aztán elkezdeni megkeresni ezt a változót az adott függvényen belül, aztán ha nem találja, akkor az eggyel kijjebb lévő függvényen belül, aztán ha ott sem találja, akkor megy a következőre, míg végül el nem ér a "nagy semmibe", azaz a globális scope-ba, ahol megint csak nem találja a deklarálást, úgyhogy előzékenyen létrehozza neked a változót itt.
Ezért aztán nagy a kísértés, hogy soha ne deklarálj változót, mert minek, hiszen ha nem teszed, majd a JavaScript létrehozza helyetted globálisan.
Igen ám, de ez borzasztóan rossz gyakorlat. Általánosan, minden programnyelvben a legjobb gyakorlat az, ha a globális változókat és függvényeket a minimumra csökkentjük, és csak annyi van belőlük, amennyi végképp elkerülhetetlen, különben teljesen feleslegesen minden függvény számára elérhető változókat hozunk létre, ami nagyon nem jó, hiszen mindenki mindent felülírhat, és nagyon nehéz követni, hogy épp mi az adott változó értéke egy hosszabb algoritmusban. Ezért MINDIG deklarálunk változót a var kulcsszóval, és legfeljebb ha globálisat akarunk deklarálni, akkor a vart minden függvényen kívülre írjuk, de akkor is kiírjuk.
Az esetek többségében nem lesz szükséged globális változókra, és csak bajt okoznak. A legtöbbször ha úgy érzed, hogy muszáj a globális változó, akkor is van egy másfajta logika, amit csak meg kell találni, és máris nem lesz szükséges a globális scope-ot szennyezni.
Remélem, hogy így érthető volt. Ha ködös, kérdezz még.
Előző válaszóló nagyon jól leírta, én csak egy apró példát szeretnék még mutatni, amivel lehet jobban megérted.
var a=1;
teszt();
function teszt(){
var a=2;
alert("lokális változó értéke a függvényben:"+a);
alert("globális változó értéke a függvényben:"+window.a);
}
Ha kipróbálod ezt az egyszerű kódot, láthatod hogy mi történik.
A lényeg, hogy az elején létrehoztál egy globális változót 'a' névvel. A teszt fv.-ben szintén létrehoztál egy 'a' immár lokális változót(hiszen fv-ben vagy). Ennek csak a neve egyezik meg az eredetivel, viszont innentől kezdve a fv-en belül ha te az a-ra hivatkozol, akkor mindig a lokális változót fogod elérni. A globális változót a window.a-val érheted el.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!