使用闭包来总和数字

时间:2016-04-06 01:32:52

标签: javascript

目前我在JS中有一个闭包,如下所示:

var addTo = function(num){

   var add = function(inner){
      return inner + num;
   };
   return add;
};

var sum = new addTo(1);

我的目标是使用上面的闭包来计算从1到100的总和(即sum = 1 + 2 + 3 + ... + 99 + 100)。有帮助吗?我知道需要一个循环,但我不确定循环内部应该包含什么,以及如何使用闭包来实现目标。谢谢你们。

4 个答案:

答案 0 :(得分:1)

  

目前我在JS中有一个闭包,如下所示:

所有功能都会创造闭包,只有在获得优势时才会显着。 ; - )

var addTo = function(num){

我不知道为什么在声明更清楚的时候使用函数表达式(对我来说):

function addTo(num) {

然后有:

  var add = function(inner){
    return inner + num;
  }
  return add;
}

哪个(坚持表达)可以是:

  return function (inner) {return inner + num};
}

然后用 new

调用它
var sum = new addTo(1);

导致 addTo 创建一个未使用的新对象,所以你可以这样做:

var sum = addTo(1);

产生完全相同的结果。所以:



function addTo(num) {
    return function (inner) {return inner + num};
}

var sum = addTo(1);

document.write(sum(3));




但是,这实际上只是Currying的一个版本,因此 sum 只会将提供的值添加到最初提供给 addTo 的内容中。< / p>

如果你想将0中的所有数字添加到某个限制,你只需要一个循环,不需要关闭:

&#13;
&#13;
function sumTo(num) {
  
  var total = 0;
  
  for (var i = 0; i <= num; i++) {
    total += i;
  }
  
  return total;
}

document.write(sumTo(5)); // 15
&#13;
&#13;
&#13;

请注意,提供一个负数将导致无限循环,你应该防止这种情况(我会让你知道如何)。

答案 1 :(得分:0)

也许您想使用递归而不是循环?

&#13;
&#13;
function addTo(initial) {

  function add(adder) {
    if (initial < 100) {
      initial+=1
      return add(adder+initial)
    }
    else {
      return adder
    }
  }

  return add(initial)
}

document.write(addTo(1))
&#13;
&#13;
&#13;

只要初始值不超过100,它就会在+本身+ 1之前加上所有计算的总和。

答案 2 :(得分:0)

尝试

function sum(x) {
    var input = x;
    function add(y) {
        return input + y;
    }
    return add;
}
//var sum1 = sum(2);
//console.log(sum1(3)); // 5
console.log(sum(2)(3)); //5

答案 3 :(得分:-1)

看起来newBuild["BuildDefinition"] = "/builddefinition/12345"; 函数会将另一个函数返回到addTo(),它会将您传递给它的任何内容添加到原始数字中(或者我认为这就是您要编写的内容;首先要做的是更改sum内的语句,使用add()代替+=,以确保保存结果。

由于你想要添加2到100之间的每个数字(因为你已经将1传递给+),所以尝试编写一个{1}}循环,从2到100遍历每个数字到addTo() 1}}函数将它们全部添加在一起。这是一个例子:

for

这里我在循环后添加了100,因为我想获取最终结果。您还可以在循环中添加100并使用sum()来获取结果,而不会在循环后更改结果。