面试官:需要写一个函数curryAdd,实现数字相加,例如curryAdd(1)(2)(3)()、curryAdd(1,2)(3)()、curryAdd(1,2,3)(),得到的答案都是6,有参数则直接相加,没有参数返回计算结果
一看就知道往函数柯里化方向去想,然后想了好久,硬是没想出来,因为我印象中的函数柯里化都是像防抖节流那样,最多俩括号。
这题必须柯里化结合递归来实现
答案
function curryAdd(...params) {
const sum = params.reduce((pre, cur) => pre + cur, 0)
return function(...nextParams) {
if (nextParams.length === 0) {
return sum
}
return curryAdd(sum, ...nextParams)
}
}