函数返回函数javascript

时间:2018-03-27 04:53:23

标签: javascript

我有一个简单的演示:

function add(a) {
    return function (b) {
        return a + b
    }
}

现在,当我致电add(1)(2)时,它会给我3

但我想要这样的事情:

add(1)(2)(3) - > 6

add(1)(2)(3)(4) - > 10

这意味着如果我愿意,我可以添加更多功能。怎么写呢?

3 个答案:

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