繁体   English   中英

JavaScript Add函数可根据需要多次调用

[英]JavaScript Add function called as many times as you wanted

为此,最简单的问题是编写一个可以返回所有参数总和的函数。 我该怎么做?

function add () {

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

我认为这正是您所需要的:

 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)()-由于空参数而结束计算并返回值

为了完成计算管道,最后一个调用必须没有值。

基本思想是创建一个带有变量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 

我只会使用这样的Spread语法

 function add(...values) { return values.reduce((sum, value) => sum + value, 0) } console.log(add(1, 4, 34, 45, 3, 4, 5)) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM