vadnica-logo
Editor Moj Blog Moje storitve O projektu Telegram O meni O meni

JavaScript Funkcije

JavaScript funkcija je blok kode, zasnovan za izvajanje določene naloge. Definira se s ključno besedo function, sledi ji ime in oklepaji (). Ime funkcije lahko vsebuje črke, številke, podčrtaje in znak $ (enaka pravila kot za spremenljivke). V oklepajih se navedejo parametri, ločeni z vejicami. Funkcije lahko vračajo vrednosti s stavkom return, sprejemajo druge funkcije kot argumente (povratni klici) ali pa se shranijo v spremenljivke (funkcijski izrazi). ES6 je uvedel tudi arrow funkcije (=>), ki omogočajo krajšo sintakso.

PRIMER
REZULTAT

Vrste funkcij v JavaScriptu

Funkcije v JavaScriptu lahko definiramo na več načinov: kot deklaracijo, izraz ali arrow funkcijo. Vsaka vrsta ima svoje lastnosti glede dviganja (hoisting), uporabe this in sintakse.

Arrow funkcija (puščičasta funkcija) je sodobna, krajša sintaksa za pisanje funkcij, ki jo je uvedel ES6 (ECMAScript 2015). Zakaj se imenuje "arrow"? Ker uporablja puščico => namesto ključne besede < code>function.

Glavne razlike:

  1. Krajša sintaksa:
    1. Klasična: function(x) { return x * x; }
    2. Arrow: (x) => x * x; (če ima samo eno vrstico, return in oklepaji za telo so avtomatski).
  2. Obnašanje this: (To je najpomembnejše!)
    1. Klasična funkcija: Ima svoj lasten this, ki se spremeni glede na to, kako jo pokličeš (npr. kot metodo objekta ali kot samostojno funkcijo).
    2. Arrow funkcija: NIMA lastnega this. Podeduje this iz okolice, kjer je definirana (lexical scoping). To je odlično za callback funkcije (npr. v map, filter), kjer ne želiš, da se this spremeni.

Metode in lastnosti funkcij

Funkcije v JavaScriptu so objekti, zato imajo lastnosti (npr. length, name) in metode (npr. call(), apply(), bind()), ki omogočajo napredno uporabo.

Popoln pregled funkcij (Cheat Sheet)

Spodnja tabela prikazuje vse načine definiranja funkcij, parametre, lastnosti in metode. Za vsak element so navedeni opis, sintaksa in konkreten primer kode.

Ime Opis Sintaksa Primer
Deklaracija funkcije Klasična definicija funkcije (dvignjena / hoisted). function ime(parametri) { ... } function pozdrav(ime) { return "Zdravo, " + ime; }
Funkcijski izraz Funkcija shranjena v spremenljivko (ni dvignjena). let ime = function(parametri) { ... }; let vsota = function(a, b) { return a + b; };
Arrow funkcija Krajša sintaksa (ES6), ne vezuje lastnega this. let ime = (parametri) => izraz; let kvadrat = (x) => x * x;
Arrow (več vrstic) Arrow funkcija z blokom kode in return. let ime = (parametri) => { ... return ...; }; let vsota = (a, b) => { let r = a + b; return r; };
Anonimna funkcija Funkcija brez imena (pogosta kot callback). function(parametri) { ... } setTimeout(function() { alert("Konec!"); }, 1000);
IIFE Takoj izvedena funkcija (Immediately Invoked). (function() { ... })(); (function() { let x = 10; console.log(x); })();
Parametri Vrednosti, ki jih funkcija sprejme ob klicu. function ime(param1, param2) { ... } function vsota(a, b) { return a + b; }
Privzete vrednosti Vrednost, če argument ni podan (ES6). function ime(param = vrednost) { ... } function pozdrav(ime = "Svet") { return "Zdravo, " + ime; }
Rest parametri Zbere preostale argumente v tabelo (ES6). function ime(...args) { ... } function vsota(...stevila) { return stevila.reduce((a,b) => a+b); }
arguments objekt Star način za dostop do vseh argumentov (ni prava tabela). arguments[i] function vsi() { return arguments[0]; }
return Vrne vrednost in konča funkcijo. return vrednost; function kvadrat(x) { return x * x; }
Brez return Funkcija vrne undefined. function ime() { ... } function pozdrav() { console.log("Zdravo"); } // vrne undefined
length Vrne število pričakovanih parametrov. funkcija.length function vsota(a, b) {} vsota.length; // 2
name Vrne ime funkcije kot niz. funkcija.name function pozdrav() {} pozdrav.name; // "pozdrav"
prototype Omogoča dodajanje lastnosti, če se funkcija uporabi kot konstruktor. funkcija.prototype Oseba.prototype.leto = 2024;
constructor Vrne funkcijo, ki je ustvarila prototip. funkcija.constructor pozdrav.constructor; // function Function() { ... }
call() Kliče funkcijo z določenim this in posameznimi argumenti. funkcija.call(thisArg, arg1, arg2) pozdrav.call(oseba, "Ana");
apply() Kliče funkcijo z določenim this in tabelo argumentov. funkcija.apply(thisArg, [arg1, arg2]) pozdrav.apply(oseba, ["Ana"]);
bind() Vrne novo funkcijo z vezanim this (ne kliče je). funkcija.bind(thisArg, arg1) let vezana = pozdrav.bind(oseba); vezana("Ana");
toString() Vrne izvorno kodo funkcije kot niz. funkcija.toString() pozdrav.toString(); // "function pozdrav() { ... }"
Closure Funkcija si zapomni spremenljivke iz zunanjega obsega. function zunanja() { let x = 10; return function() { return x; }; } function stevec() { let i = 0; return () => ++i; } let c = stevec(); c(); // 1
Callback Funkcija, podana kot argument drugi funkciji. funkcija(callback) arr.forEach(function(el) { console.log(el); });
Rekurzija Funkcija kliče samo sebe. function ime() { ... ime(); } function fakt(n) { return n <= 1 ? 1 : n * fakt(n-1); }

Zakaj uporabljati funkcije?

Ali moram vedno uporabiti return? Ne. Če funkcija ne vrača vrednosti, se privzeto vrne undefined.
Kaj je “anonimna funkcija”? Funkcija brez imena, npr. function(a,b){ return a+b; }. Pogosto se uporablja kot argument drugih funkcij.
Kako pretvorim funkcijo v spremenljivko? Preprosto ji dodelim: let sq = function(x){ return x*x; };