为了账号安全,请及时绑定邮箱和手机立即绑定

使用闭包来总和数字

使用闭包来总和数字

Cats萌萌 2019-04-24 17:18:10
目前我在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 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

目前我在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的内容中

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

function sumTo(num) {
  
  var total = 0;
  
  for (var i = 0; i <= num; i++) {
    total += i;
  }
  
  return total;}document.write(sumTo(5)); // 15

请注意,提供负数将导致无限循环,您应该防止这种情况(我将由您决定如何)。


查看完整回答
反对 回复 2019-05-08
?
隔江千里

TA贡献1906条经验 获得超10个赞

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


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))

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


查看完整回答
反对 回复 2019-05-08
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

尝试

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


查看完整回答
反对 回复 2019-05-08
?
jeck猫

TA贡献1909条经验 获得超7个赞

它看起来像addTo()函数返回另一个函数sum,它会将你传递给它的任何东西添加到原始数字中(或者我认为这就是你要写的东西;首先要做的是改变里面的语句add()来使用a +=而不仅仅是+为了make确定你保存结果)。

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

var sum = addTo(1);for (var i=2; i<100; i++) sum(i);var result = sum(100);

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


查看完整回答
反对 回复 2019-05-08
  • 4 回答
  • 0 关注
  • 682 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信