Funksjoner av høyere orden

En funksjon av en høyere orden, er en funksjon som enten:

  1. Tar imot en funksjon som et argument
  2. Returnerer en funksjon

Litt teknisk babbel, men den første av disse har vi faktisk skrevet tidligere, nemlig:

document.addEventListener('click', ourAmazingFunction)

function ourAmazingFunction() {
  alert("Thank you for clicking")
}

Siden det andre argumentet er en funksjon, er addEventListener en funksjon av en høyere orden.

For å vise hvordan b) fungerer kan vi skrive følgende kode:

// Eksempel på funksjoner som ikke er av høyere orden
function doubleMe() {
  return x * 2
}

document.write(doubleMe(20))

function tripleMe() {
  return x * 3
}

function quadraMe() {
  Return x * 4
}
// funksjonene over kan bli meget repetativt, som er helt unødvendig.
// La oss heller lage en funksjon som fikser alle linjene over for oss:

// eksempel på funksjon av høyere orden - returnerer en funksjon
function createMultiplier(multiplier) {
  return function(x) {
    return x * multiplier
  }
}

// dette gjør at vi veldig fleksiblet kan lage nye funksjoner:
let doubleMe = createMultiplier(2)
let tripleMe = createMultiplier(2)
let quadraMe = createMultiplier(2)

document.write(doubleMe(10))
document.write(tripleMe(5))
document.write(quadraMe(5))

En nyttig funksjon av høyere orden:

let myColors = ['red', 'orange', 'yellow'];
// alle arrays har tilgang til en drøss med funksjoner, forEach er en av dem:
myColors.forEach(saySomethingNice);

function saySomethingNice(color) {
  document.write("The color " + color + " is a great color<br>")
}

Dette er fleksibel kode, som gjør at myColors kan ha så mange eller få elementer man ønsker, men koden fungerer uansett.