Skip to content

Latest commit

 

History

History
36 lines (29 loc) · 974 Bytes

函数柯里化.md

File metadata and controls

36 lines (29 loc) · 974 Bytes

如何实现一个通用的柯里化函数?

  1. 需要接收一个需要柯里化的函数
  2. 需要存放每一次函数调用的参数
  3. 对参数进行判断:如果参数数目不够原函数的参数数目,不调用原函数,返回新的函数继续接收下一个参数;反之则调用函数

作用:

  1. 参数复用,逻辑复用
  2. 延时计算,延时执行
function add(num1,num2, num3, num4, num5){
    return num1+num2+ num3+ num4+ num5
}

function curry(fn){
    let self = this
    return function curried(...args){
        if(args.length >= fn.length){
            return fn.apply(self, args)
        }else{
            return function(...otherArgs){
                return curried.apply(self, [...args, ...otherArgs])
            }
        }
    }
}

let newAdd = curry(add)
console.log(newAdd(20 ,30,40,50,60))
console.log(newAdd(20)(30,40,50,60))
console.log(newAdd(20)(30,40)(50,60))
console.log(newAdd(20,30,40)(50,60))