// 没有柯里化的实现functionsum1(a, b, c){return a + b + c
}
console.log(sum1(1,2,3));// 6// 转为柯里化functionsum2(a){returnfunction(b){returnfunction(c){return a + b + c
}}}
函数柯里化简写
// 上述柯里化简写constsum3=a=>b=>c=> a + b + c
console.log(sum3(1)(2)(3));// 6
函数柯里化使用案例
// 函数功能尽可能单一的柯里化案例functionfunc1(a){
a +=2returnfunction(b){
b *=2returnfunction(c){
c **=2return a + b + c
}}}
console.log(func1(1)(2)(3));// 16
函数柯里化工厂函数
// 自动处理柯里化函数functionmyCurried(fn){returnfunctioncurry(...args1){if(args1.length >= fn.length){// fn.length获取的是函数传入参数的长度returnfn.call(null,...args1)}else{returnfunction(...args2){returncurry.apply(null,[...args1,...args2])}}}}functionsum(a, b, c, d, e){return a + b + c + d + e
}let resFunc =myCurried(sum)
console.log(resFunc(1)(2)(3)(4)(5));
console.log(resFunc(1,2)(3)(4)(5));
console.log(resFunc(1,2,3)(4)(5));
console.log(resFunc(1,2)(3,4)(5));