目录
概念
- 函数柯里化就是给一个函数传入一部分参数,此时就会返回一个函数来接收剩余的参数。
- 使用场景:递归使用和处理函数,函数功能尽可能单一。
函数柯里化的实现
// 没有柯里化的实现
function sum1(a, b, c){
return a + b + c
}
console.log(sum1(1, 2, 3)); // 6
// 转为柯里化
function sum2(a){
return function(b){
return function(c){
return a + b + c
}
}
}
函数柯里化简写
// 上述柯里化简写
const sum3 = a => b => c => a + b + c
console.log(sum3(1)(2)(3)); // 6
函数柯里化使用案例
// 函数功能尽可能单一的柯里化案例
function func1(a){
a += 2
return function(b){
b *= 2
return function(c){
c **= 2
return a + b + c
}
}
}
console.log(func1(1)(2)(3)); // 16
函数柯里化工厂函数
// 自动处理柯里化函数
function myCurried(fn){
return function curry(...args1){
if(args1.length >= fn.length){ // fn.length获取的是函数传入参数的长度
return fn.call(null, ...args1)
}else{
return function(...args2){
return curry.apply(null, [...args1, ...args2])
}
}
}
}
function sum(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));
标签:function,console,函数,JavaScript,柯里化,return,log
From: https://www.cnblogs.com/wjy-javascript/p/18009424