Skip to content

Latest commit

 

History

History
36 lines (34 loc) · 716 Bytes

柯里化和高阶函数.md

File metadata and controls

36 lines (34 loc) · 716 Bytes

柯里化

让所有函数只接受一个参数

举例

把add(1,2,3)转化成curriedAdd(1)(2)(3)的形式

const curriedAdd = a=>b=>c=>add(a,b,c)

高级例子

function currify(fn,params=[]){
  return function(...args){
    if(params.length+args.length===fn.length){
      return fn(...params,...args)
    }else{
      return currify(fn,[...args,...params])
    }
  }
}

高阶函数

把函数作为参数或者返回值的函数

compose

function compose() {
    var fns = [].slice.call(arguments)
    return function (initialArg) {
        var res = initialArg
        for (var i = fns.length - 1; i > -1; i--) {
            res = fns[i](res)
        }
        return res
    }
}