Mostanság úgy vagyok ,hogy mindig tanulok valami újat. Ez főleg annak köszönhetem ,hogy van egy projektem ,amin szoktam dolgozni. Általában ,amikor ezen dolgozok ,akkor WebStorm IDE-t használok ,mivel ahogy tapasztaltam ez a legjobb IDE webfejlesztésre ,habár van néhány hiányossága ,de még így is veri a mezőnyt. Megjegyzésként hozzá teszem ,hogy olyan webfejlesztésre gondolok ,hogy html+js+css ,node.js ,dart(habár itt megjegyzem ,hogy Darthoz van ingyenesen egy elég tisztességes IDE) ,szóval nem .net vagy java.
WebStorm mostani újabb verzió is a node.js vonalat erősíti nagyon komolyan ,ami szerintem nagyon jó irány hiszen ilyen irányban haladnak a trendek. Sajnos viszont fizetős és nincs belőle ingyenes változat mint mondjuk az Intellij vagy PyCharm -nál a community edition.

   Szóval mostanság úgy voltam vele ,hogy WebStorm nem is olyan okos , hiszen azt vettem észre ,hogy néhány változómnál azt írta ,hogy kétszer deklaráltam ,vagyis ,hogy kétszer sikerült ugyanazt a változót létrehozni ,amit furcsálltam ,mivel úgy voltam vele ,hogy igaza van de ezek a változók teljesen más blokkban(pl.:{var a}{var a}) voltak , sőt néha  két egymás utáni for ciklusban lévő ciklus változóra(pl.: for(var i=0;;){} for(var i=0;;){}) is kiírta ugyanezt ,ami még inkább megerősítette bennem ,hogy ez baromság hiszen más nyelvekben sem volt gond(itt gondolok java és c++ stb..) ,sőt elő sem jött ilyen.
Ez a dolog hibát nem okozott hanem inkább zavart engem ,de nem fordítottam rá túl sok időt ,mert volt elég dolgom ,mint egy ilyen kis figyelmeztetésre figyelni ,ami nem okoz semmi gondot.

   Aztán egyik nap gondoltam és olvasgatni volt kedvem és ilyenkor általában valami szakmai könyvet olvasok ,hogy úgy érezem ,hogy csinálok is valamit. :D  Így egyik nap elkezdtem olvasni Javascript: The Definitive Guide című könyvecskét ,ami röpke 1000 oldalas ,egy csöppet száraz de úgy is csak az első száz oldalon suhantam át és akkor megakadt a szemem a Function Scope and Hoisting részen ,ami arról szólt ,hogy a szokásos OO nyelvek blokk scope-ot használnak ,ami azt jelenti ,hogy a változó csak abban a blokkban látszódik ,amiben van ,viszont a Javascript Function Scope-ot használ ,ami azt jelenti ,hogy a változók láthatók a teljes függvényben ,amiben vannak. Na és ezt olvasva jöttem rá ,hogy nem a Webstorm volt a hülye ,hanem én ,mert nem ismertem elégé a nyelvet.

   Hiszen Webstorm okkal figyelmeztettet ezekre hiszen function scope-ban tényleg úgy látszódik a dolog ,hogy többször hoztuk létre ugyan azt a változót ,ezért jogosan figyelmeztet ámde teljesen feleslegesen ,hiszen hibát nem okoz.(Mármint eddig nálam nem okozott)

   Nálam például ez azért alakult ki ,mert néhány függvényem nagyon hosszú és a for ciklusoknál ,mindig ugyanazt a változó neveket használom ,ahogy ezt eddig tanultam. Szokásosan i,j,k,l -t szoktam ciklusváltozónak használni.
Persze meg kell jegyeznem ,hogy kerülni kell a túl hosszú függvényeket ,mivel ezek rontják a fenntarthatóságot ,de ahogy lenni szokott valahogy az ember néha ezeket figyelmen kívül hagyja lustaságból.

Összegezve: JS Function Scope-ot használ ,szóval vigyázat. Ez nem okoz hibát viszont zavaró tud lenni azoknak ,akik már programoztak olyan nyelvben ,ami blokk scope-ot használ.

Még egy érdekesség, amit olvastam ,hogy ha egy "var" típusú változót a globális névtérben hozzunk létre például: var a=10; ,akkor ezt képtelenek leszünk törölni ,viszont b=20; vagy this.c=30; változókat simán lehet törölni.

Furcsaságok:
Néhány furcsaság található itt ,szerintem a legviccesebbek a vége felé vannak.
Még több érdekesség.
Ezt már közzétettem G+-on ,de ide is berakom ,mert az egyik kedvencem :D
Videóban lévő néhány dolog már nem úgy működik ahogy , viszont végén lévő ütős dolog igen.