profileRyan KesPGP keyI build stuffEmailGithubTwitterLast.fmMastodonMatrix

JavaScript higher-order functions

Examples

Functions that operate on other functions, either by taking them as arguments or by returning them, are called higher-order functions. They allow us to abstract over actions as well as values. There are several types, here are some examples.

Functions that create new functions

function greaterThan(n) {
  return (m) => m > n
}
let greaterThan10 = greaterThan(10)
console.log(greaterThan10(11))

Functions that change other functions

function noisy(f) {
  return (...args) => {
    console.log("calling with", args)
    let result = f(...args)
    console.log("called with", args, ", returned", result)
    return result
  }
}
noisy(Math.min)(3, 2, 1)

Functions that provide new types of flow control

function unless(test, then) {
  if (!test) then()
}

repeat(3, (n) => {
  unless(n % 2 == 1, () => {
    console.log(n, "is even")
  })
})

ES6

Funciton properties

  1. name

    The name property contains the function's name:

    function foo() {}
    console.log(foo.name) // foo
    
    let func1 = function () {}
    console.log(func1.name) // func1
    
    let func4
    func4 = function () {}
    console.log(func4.name) // func4
    1. Default values

      let [func1 = function () {}] = []
      console.log(func1.name) // func1
      
      let { f2: func2 = function () {} } = {}
      console.log(func2.name) // func2
      
      function g(func3 = function () {}) {
        return func3.name
      }
      console.log(g()) // func3