什么是函数柯理化?
柯理化(Currying),又叫函数的部分求值,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
通俗来说:柯理化就是一个函数原来有多个参数,只传入一个参数,生成一个新函数,由新函数接收剩下的参数来运行得到结果。
函数的长度
函数的长度表示该函数有多少个必须要传入的参数,即形参的个数。fn.length
直接返回形参的个数。
const sum = (a, b, c, d) => a + b + c + d;
console.log(sum.length); // 4
在柯理化的过程中,如果传入的所有参数的个数小于要执行函数的形参的个数,则继续递归执行柯理化函数。
代码实现
// 实现函数柯理化
function currying (fn, ...bindArgs){
return (...args) => {
const allArgs = [...bindArgs, ...args]
if(allArgs.length < fn.length) {
return currying(fn, ...allArgs)
} else {
return fn(...allArgs)
}
}
}
// 测试函数
const sum = (a, b, c, d) => a + b + c + d;
currying(sum)(1)(2)(3)(4) // 10
currying(sum, 1)(2, 3)(4) // 10
currying(sum, 1, 2)(3)(4) // 10
currying(sum, 1, 3)(3, 4) // 10