我有一个简单的演示:
function add(a) {
return function (b) {
return a + b
}
}
现在,当我致电add(1)(2)
时,它会给我3
但我想要这样的事情:
add(1)(2)(3)
- > 6
add(1)(2)(3)(4)
- > 10
这意味着如果我愿意,我可以添加更多功能。怎么写呢?
答案 0 :(得分:7)
我在其他地方看到过类似的问题,但要求略有不同。而不是让add(1)(2)(3)
返回6,而是要求add(1)(2)(3)()
返回6。
请注意,函数的最后一次调用没有任何参数。这是一个重要的区别,因为函数应该返回另一个以数字作为参数的函数,或者它应该返回到目前为止传递的参数的总和。如果没有将最后一个参数区分为未定义(或NaN),则无法确定是否返回currying函数或到目前为止的总数。
所以我假设你想要的是add(1)(2)(3)()
返回6.以下是你如何做到这一点:
如前所述,如果当前参数是一个数字,add
函数将返回另一个带参数的函数。
如果当前参数未定义(或NaN),则返回总和。
您可以使用sum
函数通过关闭可用的变量total
来跟踪总和。
function add(x) {
var sum = x;
return function total(y) {
if (!isNaN(y)) {
sum += y;
return total;
} else {
return sum;
}
}
}
console.log(add(5)(2)());
console.log(add(5)(3)());
console.log(add(1)(2)(3)(4)());
答案 1 :(得分:0)
创建一个数组并传递给函数并递归执行相同的函数
类似这样的事情
var arr = [1,2,3,4];
function add(a , i, sum) {
if(i >= a.length ){
return sum;
} else {
sum = sum + a[i];
++i;
return add(a, i, sum)
}
}
var b = add(arr ,i=0,sum = 0);
console.log(b)
答案 2 :(得分:0)
如果你想使用数组。因为Nisargs的回答是绝对正常的,所以只有有人用谷歌搜索它。
eachContainer
返回:
function add(a) {
arrInt = a;
return function total(arrInta) {
b = 0;
arrInt.forEach(element => {
b = b + element;
});
return b;
};
}
a = [1,2,3]
console.log( add(a)());
a = [1,2,3, 4]
console.log( add(a)());