函数柯里化指:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
例如:
const sum = (a, b, c) => a + b + c
const curried = curry(sum)
console.log(curried(1)(2)(3)) // 6
console.log(curried(1, 3)(5)) // 9
console.log(curried(2)(4)(6)) // 12
实现流程图:
实现代码:
function curry(fn, ...args) {
const argNum = fn.length // 函数参数的个数
return fillArgs(fn, argNum, args || [])
}
// 获取参数
function fillArgs(fn, argNum, currArgs) {
if(argNum === currArgs.length) {
return fn(...currArgs)
}
return (...args) => {
return fillArgs(fn, argNum, [...currArgs, ...args])
}
}