Higher Order Functions

Higher Order Functions (HOF) are functions that take other functions as arguments or return functions.

Functions as Arguments (Callbacks)

function doTwice(fn) {
  fn()
  fn()
}

doTwice(() => console.log('Hello!'))
// Hello!
// Hello!

Array HOFs

const numbers = [1, 2, 3, 4, 5]

// map
const doubled = numbers.map(n => n * 2)

// filter
const evens = numbers.filter(n => n % 2 === 0)

// reduce
const sum = numbers.reduce((acc, n) => acc + n, 0)

// forEach (side effects, returns undefined)
numbers.forEach(n => console.log(n))

// find
const firstEven = numbers.find(n => n % 2 === 0) // 2

// some / every
numbers.some(n => n > 4)   // true
numbers.every(n => n > 0)  // true

Functions Returning Functions

function createMultiplier(factor) {
  return n => n * factor
}

const double = createMultiplier(2)
const triple = createMultiplier(3)

[1, 2, 3].map(double)  // [2, 4, 6]
[1, 2, 3].map(triple)  // [3, 6, 9]