Anonüümsed funktsioonid
Anonüümsed funktsioonid on nimetamata funktsioonid, mis luuakse otse koodis ning neid kasutatakse sageli kohapeal, kus neid vaja on. Selle asemel, et funktsioonile anda kindel nimi, luuakse anonüümne funktsioon otse muutujasse, argumendina või atribuudina. Anonüümseid funktsioone saab kasutada mitmel viisil, olenevalt vajadusest. NB! Lõppu lisatakse semikoolon ;
// Anonüümse funktsiooni näide
var tervita = function() {
console.log("Tere maailm!");
};
// Anonüümse funktsiooni kutsumine
tervita();

Siin on näide anonüümsest funktsioonist argumentide kasutamisel, mis tagastab summa kahe arvu vahel
var summa = function(a, b) {
return a + b;
};
var tulemus = summa(3, 5);
console.log(tulemus); // Väljund: 8

Anonüümseid funktsioone saab kasutada argumentidena teistele funktsioonidele, näiteks sündmuste käitlemiseks või ajaliste viivituste loomiseks.
// Anonüümne funktsioon koos argumendiga
setTimeout(function() {
console.log("Tere pärastlõunast!");
}, 1000);

Anonüümseid funktsioone saab kasutada massiivi elementide kuvamiseks mitmel erineval viisil. Näiteks forEach meetodi kasutamine
var array = [1, 2, 3, 4, 5];
array.forEach(function(element) {
console.log(element);
});

forEach meetod võib vastu võtta ka teisi parameetreid, näiteks indeksi või massiivi ennast:
const array = [1, 2, 3, 4, 5];
array.forEach(function(element, index, array) {
console.log("Element:", element);
console.log("Index:", index);
console.log("Array:", array);
});

Eeliste osas võib öelda, et anonüümsed funktsioonid pakuvad paindlikkust ja lihtsust, eriti olukordades, kus on vaja luua väikesi, ühekordseid funktsioone. Neil on oluline roll ka sündmustepõhises programmeerimises ja asünkroonsetes operatsioonides.
Klassikalised funktsioonid pakuvad rohkem struktureeritust ja taaskasutatavust.
Mõlemad funktsiooni liigid on kasulikud ja nende valik sõltub konkreetsest olukorrast.
IIFE (Immediately Invoked Function Expression)
IIFE (Immediately Invoked Function Expression) on anonüümse funktsiooni alaliik. IIFE on nimetatud selle järgi, kuidas see kohe pärast loomist kohe välja kutsutakse.
IIFE koosneb anonüümsest funktsioonist, mis on ümbritsetud sulgudega. See anonüümne funktsioon on koheselt väljakutsutud, tavaliselt lisades () paare selle järel.
(function() {
var x = 10;
console.log(x); // Output: 10
})();

Noolefunktsioonid
Uue Javascripti versiooniga ES6 tutvustati uut lähenemist anonüümsete funktsioonide loomisel –noolefunktsioon (arrow function). See on anonüümse funktsiooni alaliik Javascriptis. Noolefunktsioonid on lihtsustatud süntaksiga funktsioonid, mis kasutavad nooleoperaatorit (=>) funktsioonikeha defineerimiseks.
Noolefunktsioonide eeliseks on lühem ja selgem süntaks ning automaatne sidumine väliskeskkonnaga (this-sidumine). Need võimaldavad kergemini ja loetavamalt kirjutada anonüümseid funktsioone.
const noolFunktsioon = () => {
console.log("Tere noolfunktsioon!")
};
noolFunktsioon();

Ja argumentidega ja massiiviga funktsiooni näited
//noolefunktsioon argumentidega
let tervita = (nimi) => {console.log(`Tere ${nimi}`)};
tervita("Juhan");
//noolefunktsioon lihtsustatud - KUI ARGUMENTE ON ÜKS, SIIS VÕIB KA NEED SULUD ÄRA JÄTTA
let tervita2 = nimi => console.log(`Tere ${nimi}`);
tervita2("Mari");
//kui kehas on rohkem ridu, siis sulud jäävad
let liitmine = (a, b) => {
let result = a + b;
return result;
};
console.log(liitmine(3,5));
//noolefunktsioon ja massiviist elementide kuvamine
const array = [1, 2, 3, 4, 5];
array.forEach(element => console.log(element));

Eriti läheb huvitavamaks, kui lisada mitu lühendatud koodi kokku. Näiteks funktsioon, mis leiab kas arv on paaris või paaritu
const number = 5;
const isEven = number => number % 2 === 0 ? "paaris" : "paaritu";
console.log(isEven(number)); // Väljund: paaritu

Ja sama näide massiivi korral
const arvud = [1, 2, 3, 4, 5];
arvud.forEach(nr => {
const paaris = nr % 2 === 0 ? "paaris" : "paaritu";
console.log(`${nr} is ${paaris}`);
});

Noolefunktsioone ei saa kasutada kui:
- Konstruktorifunktsioonides – noolefunktsioonidel puudub
thissidumine, seega neid ei saa kasutada objektide loomisel konstruktorifunktsioonide kaudu. Konstruktorifunktsioonid vajavadthissidumist, et luua uus objekt ja seada selle omadused. - Meetoditena objektidel – kui soovite luua meetodit, mis kasutab
thisviidet objekti enda kontekstile, siis noolefunktsioone ei saa kasutada. Noolefunktsioonid päribthisväärtuse ümbritsevast kontekstist, mitte sellest objektist, kus neid kasutatakse. - Prototüüpimeetoditena – kui soovite lisada noolefunktsiooni prototüübi meetodina, siis see ei päri õiget
thissidumist ega viita õigele objektile.
Tagasikutsumisfunktsioon
Tagasikutsumisfunktsioon (callbacks) on viis, kuidas Javascriptis funktsioone teistele funktsioonidele edastada ja need hiljem tagasi kutsuda. See võimaldab teatud sündmuste või tingimuste täitumisel teostada soovitud toiminguid.
Tegelikult eespool näidetes me seda forEach puhul kasutasime, aga selguse huvides vaatame uuesti üle. Javascripti forEach meetod võtab vastu callback-funktsiooni argumendina ja seejärel kutsub seda funktsiooni iga massiivi elemendi jaoks.
let nimed = ["Kati", "Marta", "Andres", "Jüri", "Liisa"];
nimed.forEach(function(nimi) {
console.log(`<li>${nimi}</li>`);
});
Ja veel parem, me saame selle panne kirja noolefunktsioonina
let nimed = ["Kati", "Marta", "Andres", "Jüri", "Liisa"];
//pikalt
const kasutaja = nimi => console.log(`<li>${nimi}</li>`);
nimed.forEach(kasutaja);

Näide lihtsast AJAX API päringust koos callback-funktsiooniga, kasutades noolefunktsiooni
const teostaAJAXPäring = (url, callback) => {
setTimeout(() => {
const vastus = "Vastus andmebaasist";
callback(vastus);
}, 2000);
};
const callbackFunktsioon = (vastus) => {
console.log("Vastus saadud:", vastus);
};
teostaAJAXPäring("https://api.example.com/data", callbackFunktsioon);

Ülesanne
Erinevad funktsioonid
Loo klassikaline funktsioon ja noolefunktsioon, mis mõlemad väljastavad sinu nime.
// Klassikaline funktsioon
function minuNimi() {
console.log("Minu nimi on Maksim");
}
minuNimi();
// Noolefunktsioon
const minuNimiN = () => console.log("Minu nimi on Maksim");
minuNimiN();

Argumendiga funktsioon
Kirjuta funktsioon nimega kuupaevEesti, mis kuvab konsoolile praeguse kuupäeva ja kuu eesti keeles. Argumendiks kuupäev kujul 19.07.25
function kuupaevEesti(kuupaev) {
const kuud = [
"jaanuar",
"veebruar",
"märts",
"aprill",
"mai",
"juuni",
"juuli",
"august",
"september",
"oktoober",
"november",
"detsember",
];
const osad = kuupaev.split(".");
const paev = osad[0];
const kuu = kuud[osad[1] - 1];
const aasta = "20" + osad[2];
console.log(paev + ". " + kuu + " " + aasta);
}
kuupaevEesti("13.11.25"); // 13. november 2025

Teadmata hulk argumente
Kirjuta funktsioon, mis võtab siseniks kasutajalt teadmata hulga täisarve ning tagastab nende koguarvu ning keskmise.
function arvudeStatistika() {
let summa = 0;
for (let i = 0; i < arguments.length; i++) {
summa = summa + arguments[i];
}
let keskmine = summa / arguments.length;
console.log("Kogusumma:", summa);
console.log("Keskmine:", keskmine);
}
arvudeStatistika(14, 10, 12, 2, 4);

Salajane sõnum
Kirjuta noolefunktsioon nimega salajaneSonum, mis võtab sisendiks sõnumi stringi ning tagastab selle sõnumi põhjal salajase versiooni. Salajase versiooni loomiseks asendatakse kõik täishäälikud (vokaalid) tärniga (*), jättes konsonandid muutumatuks.
const salajaneSonum = (sonum) => {
let tulemus = "";
for (let i = 0; i < sonum.length; i++) {
let taht = sonum[i];
if (
taht === "a" ||
taht === "e" ||
taht === "i" ||
taht === "o" ||
taht === "u" ||
taht === "õ" ||
taht === "ö" ||
taht === "ä" ||
taht === "ü"
) {
tulemus = tulemus + "*";
} else {
tulemus = tulemus + taht;
}
}
return tulemus;
};
console.log(salajaneSonum("Tere tulemast minu veebilehele!"));

Unikaalsed nimed (noolefunktsioon)
Kirjuta noolefunktsioon nimega leiaUnikaalsedNimed, mis võtab sisendiks massiivi erinevatest nimedest ning tagastab uue massiivi, kus on ainult unikaalsed nimed esialgses järjekorras. See tähendab, et kui esineb mitu sama nime, siis tuleb need jätta ainult esinemise esialgsesse kohta ja eemaldada ülejäänud koopiad.
["Kati", "Mati", "Kati", "Mari", "Mati", "Jüri"]
const UnikaalsedNimed = (nimed) => {
const tulemus = [];
let koht = 0;
nimed.forEach(function (nimi) {
let olemas = false;
for (let i = 0; i < tulemus.length; i++) {
if (tulemus[i] === nimi) {
olemas = true;
}
}
if (olemas === false) {
tulemus[koht] = nimi;
koht = koht + 1;
}
});
return tulemus;
};
const nimed = ["Kati", "Mati", "Kati", "Mari", "Mati", "Jüri"];
console.log(UnikaalsedNimed(nimed));
