WEBnSTUDY.com
JavaScript

Kreiranje JavaScript funkcije

Ovde ćemo pre svega rekapitulirati ono što do sada znamo o kreiranju funkcija, a onda ćemo naučiti i nešto novo.

Već ste imali prilike da čitate o deklarisanju funkcije. To je nešto najbliže programerima koji već imaju iskustva, pa smo odlučili da vas u funkcije uvedemo na taj način. Takođe ste mogli da se upoznate i sa mogućnošću kreiranja reference na funkciju, što je već malo van "normalnih" veština, ali ipak, veliki broj (modernijih) jezika omogućava kreiranje pokazivača na funkciju/metod, tako da vam i to možda nije strano.

Međutim, kreiranje funkcije pomoću konstruktora, i uopšte, tretiranje funkcije kao objekta, bi mogao da vam bude potpuno nov koncept. Svim tim stvarima ćemo se posebno baviti, a ovaj tekst je samo početak.

Deklaracija funkcije

Prvi način za deklarisanje funkcije je putem klasičnog funkcijskog iskaza (function statement). Ovaj iskaz je najbliži deklarisanju funkcije u klasičnim programskim jezicima poput Pascala ili C-a. Ako niste sigurni kako ovo funkcioniše, podsetite se teksta o funkcijama.

function naziv(lista formalnih parametara) { ...telo funkcije }

Deo programa unutar funkcije se izvršava "odloženo" - tek kada se funkcija pozove.

naziv(lista stvarnih parametara);

Ovako deklarisana funkcija se može pozivati unutar svoje oblasti važenja i pre i posle deklaracije. Rezultat, odnosno izvršenje funkcije, ne mora uvek biti isto, pošto funkciji možemo proslediti parametre koje ona koristi u svom izvršavanju, tj. izračunavanju.

Funkcijski izraz

Funkcijski izraz (function expression) nastaje kada imenovanu ili anonimnu funkciju dodelimo nekoj promenljivoj. Tada ta promenljiva (koja može biti čak i npr. svojstvo objekta i elemenat niza) postaje referenca na funkciju.

var ref = function naziv(lista formalnih parametara) { ...telo funkcije };

U ovoj formi ćete najčešće sretati anonimne funkcije, dok imenovane koristimo ako je potrebno da koristimo rekurziju. Funkcijske izraze predstavljaju i lambda funkcije, odnosno sve situacije kada funkciju prosleđujemo kao parametar ili vraćamo kao rezultat funkcije.

Ne zaboravite da ovako uvedene funkcije mogu da se pozivaju preko svoje reference tek od mesta na kojem su uvedene.

ref(lista stvarnih parametara);

Funkcijski konstruktor

Evo nečega sa čime se do sada nismo susretali. Treći način da kreiramo funkciju je korišćenjem funkcijskog konstruktora. Funkcije su objekti - već smo ranije pominjali ovu osobinu JavaScripta. Isto kao što npr. nizovi imaju objekat od koga potiču (Array), tako i funkcije u krajnjoj liniji "vuku poreklo" iz objekta Function.

Zaista, svrha ovog objekta je praktično da služi za kreiranje funkcija i da održava prototipski objekat iz koga sve funkcije vuku svoja svojstva i metode.

U ovom slučaju funkcija se kreira korišćenjem operatora new nad konstruktorskom funkcijom Function(), gde se kao paramtar zadaju argumenti nove funkcije (ako ih ima), i telo funkcije u obliku stringa. Lista parametara nije obavezna, ali telo funkcije, pa makar kao prazan string bismo trebali da zadamo.

var fun = new Function("...telo funkcije..."); var fun = new Function(lista parametara, "...telo funkcije...");

Lista parametara se može formirati na dva načina. Najpre kao lista stringova (gde svaki string predstavlja "legalni" JavaScript identifikator):

"param1", "param2", ...

Drugi način je možda i jednostavniji - kao lista unutar stringa.

"param1, param2, ..."

U ovom tekstu smo pominjali neke koncepte koji vam možda još nisu poznati. Šta god vam nije jasno u vezi "prototipa", "konstruktora" i sličnih termina, objasniće se u odeljku vezanom za objektno-orijentisano programiranje u JavaScriptu.

Primer

Ovde možemo videti nekoliko primera uvođenja funkcije koja kao rezultat vraća zbir dva broja.


  function fun(a,b) {
    var zbir = a + b;
    return zbir;
  }

  fun(15, 5);   // 20
  
  var ref = function(a,b) {
    var zbir = a + b;
    return zbir;
  };
  
  ref(15, 5);   // 20
  
  var novo = new Function("a,b", "var zbir = a + b; return zbir;");
  // ili
  var novo = new Function("a", "b", "var zbir = a + b; return zbir;");

  novo(15, 5);   // 20

Pogledajte primer kako biste videli kako se razlikuju oblasti važenja za ovako deklarisane funkcije.

  1. Mozilla Developer Network, Function
Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies) radi vođenja interne statistike u cilju unapređenja korisničkog iskustva. Tako prikupljeni podaci su anonimni i nedostupni trećim licima. Vaša privatnost nije ugrožena ni na koji način.