柯里化🍏
柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。
如果要实现下面这个方法:add(1, 2)(3)(4)(5, 6, 7)(9)()
上面这个函数当参数为空的时候执行了内部参数所有值的相加,所以我们应该考虑当参数不为空的时候将缓存起来,在为空的时候再相加,这样的思路会用闭包的方式来实现。下面是实现方法:
function add(){
// 缓存所有的arguments值
let args = [...arguments]
// 新建fn函数实现柯里化
let fn = function (){
// 如果参数为空,那么递归停止,返回执行结果
if (arguments.length === 0){
return args.reduce((a,b) => a + b)
} else {
// 否则将参数保存到args里面,返回fn方法
args.push(...arguments)
return fn
}
}
return fn
}
add(1, 2)(3)(4)(5, 6, 7)(9)() // 37