CodeWilderness
JS coding flow
Singing Parrot as author
Radošević Dejan

JS - Funkcije

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.

function fnName(paramOne, paramTwo){
  // tijelo funkcije
  return paramOne + paramTwo;
}
 
// poziv funkcije
// kada se funkcija pozove parametri postaju argumenti iste
fnName(1,2);

U JS-u funkcije se mogu tretirati kao vrijednosti ostalih tipova:

function fnName(params){
  // fn code
}
 
const varName = fnName; // ne koristimo zagrade jer ne pozivamo funkciju
const callFn = varName("args");
function argFn(param){
  console.log(param);
}
 
function fnMain(mainParam, fnParam){
  return fnParam(mainParam);
}
 
fnMain("Hello JS", argFn);
function outerFn(){
  return innerFn(){
    // code
  }
}

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.

// anonimna funkcija smještena u varijabli
const varName = function () {
  // code
}
 
// anonimna funkcija kao povratna funkcija
setTimeout(function () {
  // code
}, 1000);

IIFE 1

Ove funkcije omogućavaju da se odmah pozovu po definisanju, bez potrebe da se odvojeno referencira.

(function (param) {
  console.log(param);
})("Param value");

Korisne su u slučajevima kada je potrebno:

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.

const arrowFn = (param) => {
  // code
  //return
};

​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.

const arrowFn = (param) => console.log(param);

​U slučaju da funkcija treba da vrati objekat, koristimo literal object notation.

const objectReturn = () => ({
  objParam: objValue,
});
/**
 * @info {} uglaste zagrade po defaultu ukazuju na tijelo funkcije pa stavljamo zagrade () kako JS ne bi tretirao {} kao tijelo funkcije već kao literalni objekat */

Arrow funkciju nikada ne koristiti za kreiranje metode u objektima, jer this u njima neće ukazivati na željenu vrijednost.

Footnotes

  1. Immediately Invoked Function Expression

  2. Odnosi se na sve varijable i funkcije koje su definisane na najvišem nivou, tj dostupne su SVGAnimatedEnumeration.

  3. this je specijalna ključna riječ koja se koristi za referenciranje trenutnog objekta nad kojim se izvršava funkcija ili kontekst.

  4. 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.