函数式编程前置知识-函数是一等公民(First-class function)

322 阅读1分钟

函数是一等公民包含三个特征:

  1. 函数可以存贮在变量中
  2. 函数可以作为参数
  3. 函数可以作为返回值

因为Javascript 中函数就是一个普通对象(可以通过new Function()),所以我们可以把函数存储到变量/数组中,它还可以作为另一个函数的参数和返回值,甚至我们可以在程序运行过程时通过 new Function('alert(1)') 来构造一个新函数;

// 1、函数可以存储在变量中
const fn = (msg) => alert(msg)

// 2、函数可以做为另一个函数的参数
function forEach(arr, fn) {
    for(item of arr) {
        fn(item)
    }
}

// 3、函数可以作为另一个函数的返回值
function once (fn) {
    let done = false
    return function () {
        if (!done) {
            done = true
            return fn.apply(fn, arguments)
        }
    }
}
const pay = once(function(money){
    console.log(`支付了:${money}元`)
})

console.log(pay(5))
console.log(pay(15))