函数柯里化:将接受多个参数的函数转换为可以接受单个参数函数的技术
优点:参数复用和提前传递、延迟执行等
原理:利用闭包进行参数缓存,当参数数量和目标函数需要的形参数量一致时调用目标函数
tips:有一个小概念,js函数的 length 就是所需形参的数量
代码示例:
// 目标函数
const targetFn = (a, b, c, d, e) => (a + b + c + d) * e
// 柯里化包装函数
const currying = (fn, ...otherArgs) => {
const innerFn = (...innerArgs) => currying(fn, ...otherArgs, ...innerArgs)
return otherArgs.length === fn.length ? fn(...otherArgs) : innerFn
}
// 查看结果
console.log(currying(targetFn)(1)(2)(3)(4)(2)) // 20
console.log(currying(targetFn, 1)(2, 3)(4)(2)) // 20
console.log(currying(targetFn, 1, 2)(3)(4)(2)) // 20
console.log(currying(targetFn, 1, 2)(3, 4)(2)) // 20