思路
- 利用闭包的思想把要被变为柯里化的函数给保存在内存中。
- 用函数身上的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))