Kezdőoldal » Számítástechnika » Programozás » JavaScript var változó használ...

JavaScript var változó használata?

Figyelt kérdés
A "Tanuljuk meg a JavaScript használatát 24 óra alatt" c könyvet olvastam, és a 4. leckénél leírást ad a var kulcsszóról, ami helyi változót hoz létre. Leírja azt is, hogy mire való a helyi és az általános változó, és, hogy a var kulcsszó sok esetben hanyagolható, de ajánlatok kitenni, mert sok problémát elkerülhetünk vele. Nos nekem ez még mindig zavaros, többször is visszaolvastam a könyvet, azonban még mindig nem értem mi a lényege a var változónak. Eddig egy olyan kép állt össze a fejemben, hogy: "az általános változó az egész dokumentumra jellemző, és ha egy általános változónak adunk egy értéket, akkor az mindenhol jelen lesz. A helyi változónak viszont csak egy bizonyos helyen lesz értéke a dokumentumban, amely átveszi az általános változó értékét, (ha persze kitesszük a dokumentumba) és egy meghatározott helyen hozzáadhatunk még több értéket, ezek az értékek viszont már nem lesznek jellemzőek az egész dokumentumra, csak a var kulcsszón belüli függvényekre..." Ezzel csak az a baj, hogy én nem hiszem, hogy ennek így kellene hangzania, mert a könyv mást ír le, amit én el tudok képzelni. Valaki el tudná magyarázni részletesebben a var változó működését? Előre is köszönöm!
2013. jan. 26. 13:12
 1/5 anonim ***** válasza:
68%

(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;)

2013. jan. 26. 15:32
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
100%
Egyébként ezeket nem lehet csak könyvből megérteni, írni kell a példaprogramokat magadtól (minden fejezethez), miniprojecteket kitűzni, gúglizni.
2013. jan. 26. 15:36
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
100%

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.

2013. jan. 26. 18:12
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
100%

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.

2013. jan. 28. 13:57
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Most már értem! Nagyon szépen köszönöm a válaszokat! :D
2013. jan. 28. 16:34

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!