最简单的问题就是编写一个可以返回所有参数之和的函数。我怎么能这样做?
function add () {
}
add(1)(2)(3)(); //6
add(5)(6)(7)(8)(9)() //35
答案 0 :(得分:5)
我认为这正是你所需要的:
function add(value) {
return (val) => val !== undefined ? add(value + val) : value;
}
console.log(add(2)(2)()); //4
console.log(add(2)(2)(5)(5)()); //14
console.log(add(1)(1)(1)(1)(1)()); //5
console.log(add(1)(1)(0)(1)(1)()); //4

工作原理
对于每个调用,它在内部声明一个函数,结果它在每个调用中创建一个闭包(持久范围)。由于现有的闭包,以这种方式创建的函数可以访问其参数+之前的调用参数。
所以如果我调用add(2)(3)():
要完成计算管道,最后一次调用必须没有值。
答案 1 :(得分:3)
基本思想是创建一个带有变量sum
的闭包,我们可以更新它,如果值未定义则返回sum
,或者返回内部函数:
const add = (n) => {
let sum;
const inner = (n) => n === undefined ? sum : (sum = (sum || 0) + n, inner);
return inner(n);
};
console.log(add(1)(2)(3)()); //6
console.log(add(5)(6)(7)(8)(9)()); //35

答案 2 :(得分:0)