[英]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)():
为了完成计算管道,最后一个调用必须没有值。
基本思想是创建一个带有变量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.