实现一个函数,将任意函数变为柯里化函数

303 阅读1分钟

思路

  • 利用闭包的思想把要被变为柯里化的函数给保存在内存中。
  • 用函数身上的length属性来判断传入的参数的数量是否够,不够的话不断的返回一个curry函数,直至参数够时,调用函数。
function curry(fun,...arg){
    if(fun.length <= arg.length){
        return fun(...arg)
    }
    return (...params)=>{
        return curry(fun,...arg,...params)
    }
}
let foo = (a,b,c)=>a + b + c
let res = curry(foo)

console.log(res(1)(2)(3))
console.log(res(1)(2,3))
console.log(res(1,2)(3))

image.png