JavaScript je skriptni-programski jezik kreiran od strane Brendana Eicha 1995. godine, koji je prvobitno nosio naziv “Mocha”. Unutar Netscape-a (kompanija u kojoj je radio Brendan Eich), jezik je bio poznat kao “LiveScript”, ali kada je izašao u javnost, dobio je naziv “JavaScript” kako bi privukao pažnju Java developera tog vremena. Često se koristi skraćenica “JS” umjesto punog naziva. Međutim, zvanični naziv jezika je “ECMAScript”. Sintaksa jezika i njegovo ponašanje su definisani prema ECMAScript (ES) i TC39 standardima.
Inicijalno jezik je kreiran kako bi se web stranice učinile interaktivnijim, dok danas jezik izlazi iz tih okvira i koristi se i van pretraživača. Većina web sajtova kao i svi moderni pretraživači koriste JS pa ga to čini najšire primjenjivanim programskim jezikom.
Jedan od važnih principa JS-a je očuvanje kompaktibilnosti unazad. To znači da kada se jednom nešto prihvati kao validan JS, neće biti promjene u budućnosti koja će učiniti da taj kod ne bude validan u JS-u. Dakle kada se jednom nešto nađe u JS-u, ne može se više izbaciti jer bi moglo da sruši programe koji su prethodno napisani. Postoje neki izuzeci ali riječ je o rijetkim promjenama koje se odnose na stvari koje su u izuzetno rijetkoj upotrebi.
Interpretacija
JavaScript je često percipiran kao interpreterski jezik, iako njegova priroda nije tako jednostavna. Ono što često dovodi do zabune je činjenica da JS ne isporučuje binarnu formu koda (izvršiv kod), već sam izvorni kod. Međutim, ključno pitanje da li je JS interpreterski ili kompajlirani jezik može se sagledati kroz način upravljanja greškama.
Skriptni jezici izvršavaju kod od vrha prema dnu, što znači da ne postoji inicijalni prolazak kroz kod prije izvršavanja. Ovo znači da će se dio koda izvršiti do određene greške, nakon čega će izvršavanje biti prekinuto. Ova karakteristika je ključna u razumijevanju prirode JS jezika i njegovog upravljanja greškama.
Programi koji prolaze kroz proces parsiranja1 imaju mogućnost da otkriju greške prije samog izvršavanja, što može rezultirati neizvršavanjem programa u slučaju greške. Svi programi koji se kompajliraju moraju proći kroz fazu parsiranja. Nakon parsiranja, program prelazi u fazu prevođenja iz parsirane forme u izvršivu formu. Ovo znači da i jezici koji se parsiraju generišu izvršiv kod prije samog izvršavanja.
Da skratim priču, JS se kompajlira, a u pitanju je JIT2 kompilacija.
JS u pretraživaču
U WEB pretraživačima razlikujemo tri nivoa JavaScript-a:
- ECMAScript - omogućava primjenu osnovne funkcionalnosti.
- DOM - interfejs koji omogućava interakciju sa elementima web stranice.
- BOM - API pretraživača za interakciju sa samim pretraživačem.
JS nema mogućnost pristupa memoriji niskog nivoa ili procesoru, jer je inicijalno kreiran za web pretraživač koji ne zahtijeva takve privilegije.
U pretraživaču JS je u mogućnosti da:
- dodaje nove HTML stranice ili mijenja postojeće,
- mijenja stil stranice,
- odgovara na akcije korisnika
- šalje zahtjeve ka mreži i udaljenim serverima
- vrši upload fajlova
- pamti podatke na strani klijenta (local storage)…
Dodavanje JS skripte/koda unutar HTML dokumenta
Dodavanje se može izvršiti na dva načina:
-
Interno:
- unutar <head> elementa
- unutar <body> elementa
-
Eksterno:
-
Unutar <head> elementa na dva načina:
- defer - ovaj atribut omogućava pretraživaču da odmah učita JS fajl ali da krene sa njegovim izvršavanjem tek nakon učitavanja cijelog HTML dokumenta. Skripta se dakle pokreće tek kada je DOM u potpunosti izgrađen. Defer skripte se drže relativnog redosleda baš kao i obične skripte.
- async - sličan je deferu ali pretraživač u ovom slučaju ne garantuje izvršavanje skripte. Ako imamo više od jedne skripte treba paziti da ne zavise jedna od druge jer redosled kojim su definisane ne garantuje redosled izvršavanja.
-
Iznad zatvarajućeg <body> elementa
Footnotes
-
Parsiranje je proces analize ulaznog teksta u skladu sa određenim gramatičkim pravilima jezika. U kontekstu programiranja, parsiranje se odnosi na proces analize izvornog koda programskog jezika radi provjere sintakse i formiranja apstraktnog sintaksnog stabla (AST) koje predstavlja strukturu izvornog koda. ↩
-
JIT kompilacija omogućava dinamičko generisanje i izvršavanje optimizovanog mašinskog koda tokom izvršavanja programa, čime se postiže bolja performansa u poređenju sa čistim interpretiranjem. Ova tehnika je često korišćena u jezicima kao što su Java, JavaScript, .NET … ↩