Deo zbornika Napredni Javaskript

Kako rade callback funkcije?

Poznato je da možemo proslediti jednu funkciju drugoj kao argument. Kako ovo radi? Funkcije u JavaScriptu su, u stvari, podaci, ali posebna vrsta podataka sa dve važne karakteristike:

  • Sadrže kod.
  • Mogu se izvršiti.

Pošto je funkcija kao i svaki drugi podatak, možemo je proslediti drugoj funkciji kao argument.

Primer: Klasična povratna funkcija

U narednom primeru imamo glavnu funkciju, koja prima drugu funkciju kao parametar, a potom je izvršava.

function glavna(callback) {
  callback()  // izvršava prosledjenu funkciju
}

function x() {
  console.log("Ja sam funkcija x")
}

function y() {
  console.log("Ja sam funkcija y")
}

// pozivamo glavnu sa prosledjenim povratnim funkcijama
glavna(x)
glavna(y)

Primer: Streličasta povratna funkcija

Umesto klasičnih možemo koristiti streličaste funkcije:

const glavna = callback => callback()

const x = () => console.log("Ja sam funkcija x")

const y = () => console.log("Ja sam funkcija y")

glavna(x)
glavna(y)

Primer: Prosleđivanje vrednosti povratnoj funkciji

Glavna funkcija može proslediti argument povratnoj funkciji, na sledeći način:

function glavna(callback) {
  callback(42)
}

function sporedna(e) {
  console.log("Prosledjena mi je vrednost", e)
}

glavna(sporedna)

Primer: Sabiranje rezultata povratnih funkcija

Prvo ćemo definisati dve jednostavne funkcije, koje vraćaju fiksne vrednosti. Potom ćemo napraviti treću, koja prihvata dve funkcije kao parametre, izvršava ih i vraća zbir onoga što one vrate. Konačno, prosledićemo dve konkretne funkcije trećoj, da ih ona izvrši:

function funkcija1() {
  return 1
}

function funkcija2() {
  return 2
}

function izvrsiObe(a, b) {
  return a() + b ()
}

izvrsiObe(funkcija1, funkcija2)

Istu stvar možemo postići ako prosledimo anonimne funkcije kao parametre.