prethodna      sadržaj        slijedeća     
Vodič za core JavaScript 1.5 



Poglavlje 6   Funkcije


Funkcije su jedna od osnovnih gradivnih jedinica u JavaScriptu. Funkcija je JavaScript procedura — skup naredbi koje izvršavaju određeni zadatak. Da bi koristili funkciju prvo se mora definirati, a zatim ju skripta može pozvati.

Ovo poglavlje sadrži:



Definiranje funkcija

Definicija funkcije sastoji se od function ključne riječi iza koje slijedi:

Npr., naredni code definira funkciju pod nazivom square:

function square(number) {
   return number * number;
}

Funkcija square ima jedan argument nazvan number. Sastoji se od jedne naredbe koja vraća argument funkcije pomnožen sam sa sobom. Naredba return određuje vrijednost koju će funkcija vratiti.

return number * number

Svi parametri se prosljeđuju funkciji pomoću vrijednosti. Vrijednost se prosljeđuje funkciji, no ako funkcija promijeni vrijednost parametra ova promjena se ne dešava globalno ili u funkciji koja poziva. Pa ipak, ako se funkciji proslijedi objekt kao parametar i ako funkcija promijeni svojstvo objekta, ta je promjena vidljiva i izvan funkcije. To je pokazano u narednom primjeru:

function myFunc(theObject) {
   theObject.make="Toyota"
}

mycar = {make:"Honda", model:"Accord", year:1998};
x=mycar.make;     // returns Honda
myFunc(mycar);    // pass object mycar to the function
y=mycar.make;     // returns Toyota (prop was changed by the function)

Funkcija može biti definirana i na osnovu nekog uvjeta. Npr., definirajući funkciju na slijedeći način:

if (num == 0)
{
   function myFunc(theObject) {
   theObject.make="Toyota"
   }
}

Funkcija myFunc je definirana samo ako je num jednako 0. Ako nije onda funkcija nije definirana i svaki pokušaj da se izvrši neće proći.

Kao dodatak definiranju funkcije, mogu se definirati  Function objekti, kao što je opisano u  "Function objekti" str. 106.

Metoda je funkcija kojoj se pridružuje objekt. Više o objektima i metodama naučit ćete u Poglavlju 7, "Rad sa objektima"

Funkcija također može biti definirana i unutar objekta. Ovo se naziva funkcijski izraz. Obično je takva funkcija anonimna, odnosno bez naziva. Npr., funkcija square može se definirati kao:

const square = function(number) {return number * number};

Ovo je pogodno kad funkciju prosljeđujemo kao argumant drugoj funkciji. Naredni primjer pokazuje definiranu map funkciju kojoj je anonymous funkcija kao svoj prvi parametar:

function map(f,a) {
   var result=new Array;
   for (var i = 0; i != a.length; i++)
      result[i] = f(a[i]);
   return result;
}

naredni poziv

map(function(x) {return x * x * x}, [0, 1, 2, 5, 10];

daje [0, 1, 8, 125, 1000].



Pozivanje funkcije



  Samo definiranje funkcije nije dovoljno jer ju ne izvršava. Definiranje funkcije samo imenuje funkciju i određuje što će raditi kad se ona pozove. Pozivanje funkcije izvršava određene radnje uz indicirane parametre. Npr., ako definirate funkciju square trebae ju pozvati sa :

square(5)

Prethodna naredba poziva funkciju s argumentom pet. Funkcija izvršava svoje naredbe te vraća vrijednost 25.

Argumenti funkcije nisu ograničeni samo na stringove i brojeve. Također, možete proslijediti čitave objekte funkciji. Funkcija show_props (definirana u  "Objekti i svojstva" str. 91) je primjer funkcije koja za argument uzima objekt.

Funkcija čak može biti i rekurzivna, tj. može pozivati samu sebe. Npr., ovdje je funkcija koja izračunava faktorijal:

function factorial(n) {
   if ((n == 0) || (n == 1))
      return 1
   else {
      var result = (n * factorial(n-1) );
      return result
   }
}

Onda možete izračunavati faktorijale od jedan do 5 prema slijedećem :

a=factorial(1) // returns 1
b=factorial(2) // returns 2
c=factorial(3) // returns 6
d=factorial(4) // returns 24
e=factorial(5) // returns 120



Upotreba niza argumenata



Argumenti funkcije se održavaju u nizu. Unutar funkcije mogu se adresirati argumenti koji joj se prosljeđuju. Pogledajte primjer:

arguments[i]

Gdje je i redni broj argumenta počevši od nule. Tako da je prvi argument proslijeđen funkciji arguments[0]. Ukupni broj argumenata je prikazan sa arguments.length.

Upotrebivši niz argumnata, može se pozivati funkcija sa mnogo više argumenata nego što je formalno deklarirano. Ovo je često puta korisno ako unaprijed ne znate koliko će argumenata biti proslijeđeno funkciji. Može se upotrijebiti arguments.length da se odredi broj argumenata proslijeđenih funkciji, a zatim obraditi svaki argument pomoću niza argumenata.

Npr., uzmimo funkciju koja koncentrira nekoliko stringova. Jedini formalni argument funkcije je string koji određuje znakove za razdvajanje stavki koje želimo spojiti. Funkcija je definirana prema slijedećem:

function myConcat(separator) {
   var result="" // initialize list
   // iterate through arguments
   for (var i=1; i<arguments.length; i++) {
      result += arguments[i] + separator
   }
   return result
}

Funkciji se može proslijediti bilo koji broj argumenata te kreira popis koristeći svaki argument kao stavku popisa.

// returns "red, orange, blue, "
myConcat(", ","red","orange","blue")

// returns "elephant; giraffe; lion; cheetah; "
myConcat("; ","elephant","giraffe","lion", "cheetah")

// returns "sage. basil. oregano. pepper. parsley. "
myConcat(". ","sage","basil","oregano", "pepper", "parsley")

Vidi Function objekt u Core JavaScript Reference .

JavaScript 1.3 i ranije verzije. Niz argumenata je svojstvo Function objekta i može se naći iza naziva funkcije :

functionName.arguments[i]



Predefinirane funkcije



JavaScript ima nekoliko top-level predefiniranih funkcija:

Naredna poglavlja opisuju ove funkcije. Vidi Core JavaScript Reference  za detaljnije informacije o svim funkcijama.


eval funkcija

Funkcija eval procjenjuje string u JavaScript code-u bez pozivanja pojedinog objekta. Sintaxa je:

eval(expr)

gdje je expr string koji se procjenjuje.

Ako string predstavlja izraz, eval procjenjuje izraz. Ako argument predstavlja jednu ili više JavaScript naredbi, eval izvršava naredbe. Ne pozivajte eval da bi se procijenio aritmetički izraz jer JavaScript aritmetički izraz procjenjuje automatski.


isFinite funkcija

Funkcija isFinite procjenjuje argument da odredi da li je on konačan broj. Sintaxa je:

isFinite(number)

gdje je number broj koji se procjenjuje.

Ako je argument NaN , pozitivna ili negativna beskonačnost, ova metoda daje false, a u protivnom daje true.

Naredni code provjerava klijentov unos da odredi da li je to konačan broj.

if(isFinite(ClientInput) == true)
{
   /* take specific steps */
}


isNaN funkcija

Funkcija isNaN procjenjuje argument da odredi da li je to "NaN" (not a number - nije broj). Sintaxa glasi:

isNaN(testValue)

gdje je testValue je vrijednost koju želite procijeniti.

Funkcije parseFloat i parseInt vraćaju "NaN" kada procijene da vrijednost nije broj. Fumkcija isNaN daje true ako se proslijedi "NaN" , a false u obrnutom slučaju.

Naredni code procjenjuje floatValue da odredi da li je to broj , a zatim sukladno tome pozivaju proceduru:

floatValue=parseFloat(toFloat)

if (isNaN(floatValue)) {
   notFloat()
} else {
   isFloat()
}


parseInt i parseFloat funkcije

Dvije "parse" funkcije, parseInt i parseFloat , vraćaju numeričku vrijednost kada se za argument dade string. Sintaxa je :

parseFloat(str)

gdje parseFloat analizira svoj argument tj. string str, te pokušava za rezultat dati floating-point broj. Ako nađe znak koji nije (+ ili -), numerički (0-9), decimalna točka ili exponent, onda za rezultat daje znakove (brojeve) do tog znaka, a taj znak i sve naredne znakove zanemaruje. Ako se prvi znak ne može pretvoriti u broj, onda daje "NaN" (not a number = nije broj).  

Naredna funkcija je :

parseInt(str [, radix])

parseInt analizira svoj prvi argument tj. str, te pokušava vratiti integer određenog radix -a (baze). Baza je određena drugim opcionalnim argumentom, radix. Npr., radix deset određuje da se radi o decimalnom broj, osam oktalnom, 16 hexadecimalnom, itd. Za baze iznad deset, slova označavaju znamenke veće od 9. Npr., kod hexadecimalnih brojeva (baza 16), koriste se slova od A do F .

Ako parseInt naiđe na znak koji nije broj (u određenoj bazi), ignorira njega i sve naredne znakove te vraća integer (cio broj) koji je pronađen sve do tog znaka. Ukoliko se prvi znak ne može pretvoriti u broj (u određenoj bazi), daje "NaN." Dakle, funkcija parseInt reže string u integer vrijednost.


Number i String funkcije

Funkcije Number i String omogućuju pretvaranje objekta u broj ili string. Sintaksa im je:

Number(objRef)
String(objRef)

gdje je objRef objekt referenca.

Naredni primjer pretvara Date objekt (Datum objekt) u čitljivi string string.

D = new Date (430054663215)
// The following returns
// "Thu Aug 18 04:37:43 GMT-0700 (Pacific Daylight Time) 1983"
x = String(D)


escape i unescape funkcije

Funkcije escape i unescape omogućuju enkodiranje i dekodiranje stringova. Funkcija escape vraća hexadecimalno enkodiranje argumenta u ISO Latin znakovnom setu. Funkcija unescape vraća ASCII string za određenu hexadecimalnu enkodiranu vrijednost.

The syntax of these functions is:

escape(string)
unescape(string)

Ove funkcije se prvenstveno koriste u server-side JavaScriptu za enkodiranje i dekodiranje naziv/vrijednost parova u URL-ovima.

Funkcije escape i unescape ne rade dobro sa ne-ASCII znakovima i zastarjele su. U JavaScript 1.5 i kasnije, koristite encodeURI , decodeURI, encodeURIComponent te decodeURIComponent.


prethodna      sadržaj        slijedeća      
Copyright © 2000 Netscape Communications Corp. All rights reserved.

Posljednje izmjene Rujan 28, 2000