Funkcije su jedan od osnovnih blokova svakog programskog jezika. Omogućavaju kreiranje ponovljivog koda koji se potom može pozvati iz nekog drugog dijela programa.
U JS-u funkciju deklarišemo upotrebom ključne riječi function nakon koje slijedi ime funkcije. Ime mora biti validan JS indetifikator. Poslije imena funkcije slijedi par zagrada koje mogu imati jedan ili više parametara. Parametri predstavljaju ulazne podatke na osnovu kojih se vrši neka obrada.
Blok funkcije je označen vitičastim zagradama i tu se smješta željeni kod.
Funkcije u JS-u podrazumijevano vraćaju undefined kao vrijednost nakon izvršavanja. Ako je potrebno da vrati neku specifičnu vrijednost koristi se ključna riječ return.
U JS-u funkcije se mogu tretirati kao vrijednosti ostalih tipova:
- Mogu se smjestiti u varijablu.
- Proslijeditit drugoj funkciji kao argument.
- Vratiti kao vrijednost iz druge funkcije.
Anonimne funkcije
Anonimne funkcije nemaju svoje ime, pa ne mogu stajati samostalno niti ime se može direktno pristupiti. Dio su neke varijable ili povratne funkcije. Sintaksa je ista kao i kod obične funkcije samo što se izostavlja njen naziv.
IIFE 1
Ove funkcije omogućavaju da se odmah pozovu po definisanju, bez potrebe da se odvojeno referencira.
Korisne su u slučajevima kada je potrebno:
- zapakovati logiku i izbjeći zagađenje globalnog opsega 2.
- sakriti implementaciju i kontrolisati vidljivost promjenjivih (enkapsulacija).
- kada je potrebno izbjeći konflikt tj. spriječiti da naša funkcija pregazi neku drugu globalnu funkciju/promjenjivu sa istim imenom.
Arrow funkcije
Obično se za arrow funkcije kaže da predstavljaju kraći način zapisivanja funkcionalnog izraza. Ipak, ovaj način kreiranja funkcije je prije svega osmišljen kako bi se this3 definisao statičko od strane leksičkog opsega4 koji okružuje funkciju. Dakle funkcija deklarisana na ovaj način mijenja ponašanje ključne riječi this i u njima this ukazuje na ono što se neposredno nalazi izvan funkcije.
Ako koristimo samo jedan parametar zagrade nijesu obavezne, a ukoliko imamo samo jedan izraz u sklopu bloka onda se mogu izostaviti i vitičaste zagrade kao i ključna riječ return.
U slučaju da funkcija treba da vrati objekat, koristimo literal object notation.
Arrow funkciju nikada ne koristiti za kreiranje metode u objektima, jer this u njima neće ukazivati na željenu vrijednost.
Footnotes
-
Immediately Invoked Function Expression ↩
-
Odnosi se na sve varijable i funkcije koje su definisane na najvišem nivou, tj dostupne su SVGAnimatedEnumeration. ↩
-
this je specijalna ključna riječ koja se koristi za referenciranje trenutnog objekta nad kojim se izvršava funkcija ili kontekst. ↩
-
Leksički opseg u JavaScriptu odnosi se na oblast koda u kojoj je definisana varijabla ili funkcija. To znači da leksički opseg određuje gdje u kodu se varijabla ili funkcija može koristiti ili biti vidljiva. ↩