JavaScript根据需要添加多次调用函数

时间:2017-11-16 21:20:32

标签: javascript

最简单的问题就是编写一个可以返回所有参数之和的函数。我怎么能这样做?

function add () {

}
add(1)(2)(3)();  //6
add(5)(6)(7)(8)(9)()  //35

3 个答案:

答案 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)():

  • add(2) - 返回具有可见2值的函数
  • add(2)(3) - 用输入2 + 3调用第二个函数并返回可见值等于5的第三个函数
  • 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)

我会像这样使用Spread syntax



await