WEBnSTUDY.com
JavaScript

Reference na JavaScript funkcije

Sada morate obratiti pažnju na jako bitnu stvar. Već smo pomenuli reference kada smo se upoznali sa objektima. Zapamtite: u JavaScriptu su čak i funkcije objekti! To znači da možemo imati i reference na funkcije - promenljive koje "pokazuju" na funkcije koje se nalaze "negde u memoriji".

Zahvaljujući tome funkcije se mogu prosleđivati kao parametri ili vraćati kao rezultati. Ovo su tzv. lambda funkcije. Ovome ćemo se vratiti kada budemo detaljnije proučavali funkcije.

Ono što nas trenutno zanima je sledeće: ako funkciju uvedemo u program preko reference, ona će biti definisana kao promenljiva (referenca) a neće važiti kao funkcija.

Referenca na funkciju

Šta se dešava kada funkciju uvedemo preko reference?


  function f()
  {
    fun(2, 5);  // GREŠKA - referenca fun ovde nije definisana (funkcija bi bila)
    
    // nemojte se zavarati - ovo nije funkcija fun, već anonimna funkcija
    // za koju nas vezuje referenca (promneljiva) fun
    // - iako funkciju pozivamo sa fun(), to nije zaista naziv funkcije
    var fun = function(a, b)  
    {
      console.log(a+b);
    }

    fun(10, 15);  // poziv funkcije fun() posle njene deklaracije je U REDU
  }
  
  fun(1, 2);  // GREŠKA - očekivano, funkciju ne možemo pozvati van njene oblasti važenja
		

Reference nisu moguće samo za anonimne, već i imenovane funkcije. Ako kreirate funkciju unutar izraza dodele, ne očekujte da je možete pozvati po njenom imenu, već samo preko reference.

Zašto onda na ovaj način uopšte deklarišemo imenovane funkcije? Jednostavno, praktično je ako je tu funkciju potrebno rekurzivno pozivati.

Referenca na imenovanu funkciju


  function f()
  {
    // referenca fun na imenovanu funkciju fakt()
    // iako tako izgleda, ovo nije klasična funkcija - uvedena je u program putem izraza dodele
    var fun = function fakt(a)  
    {
      if (a == 0) return 1;
      return a * fakt(a-1);  // rekurzivan poziv fukncije fakt()
    }

    fun(5);  // poziv funkcije preko reference fun() je U REDU
    fakt(5);  // poziv funkcije preko preko njenog imena je GREŠKA
  }
		

Samo da potvrdimo još jednu sitnicu. Referencu je moguće kreirati i na običnu funkciju.

Referenca na funkciju

Kada deklarišemo funkciju, na nju je takođe moguće kreirati referencu.


  function f()
  {
    fun(2, 5);  // GREŠKA - referenca fun ovde nije definisana
    zbir(2, 5);  // U REDU - funkcija je važeća
    
    var fun = zbir;  // referenca fun na funkciju zbir()
    
    function zbir(a, b)  // deklarišemo i funkciju zbir  
    {
      console.log(a+b);
    }

    fun(10, 15);  // U REDU
    zbir(10, 15)  // U REDU
  }
  
  fun(1, 2);  // GREŠKA - očekivano, funkciju preko reference ne možemo pozvati van njene oblasti važenja
  zbir(1, 2);  // GREŠKA - to važi i za funkciju
		
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.