使用闭包来总和数字

目前我在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)。有帮助吗?我知道需要一个循环,但我不确定循环内部应该包含什么,以及如何使用闭包来实现目标。多谢你们。


Cats萌萌
浏览 683回答 4
4回答

慕的地8271018

目前我在JS中有一个闭包,如下所示:所有功能都创造了闭包,只有在获得优势时才会显着。;-)var addTo = function(num){我不知道为什么在声明更清楚时使用函数表达式(对我来说):function addTo(num) {然后有:&nbsp; var add = function(inner){&nbsp; &nbsp; return inner + num;&nbsp; }&nbsp; return add;}哪个(坚持表达)可以是:&nbsp; return function (inner) {return inner + num};}然后你用new调用它:var sum = new addTo(1);这会导致addTo创建一个未使用的新对象,因此您可以这样做:var sum = addTo(1);它产生完全相同的结果。所以:function addTo(num) {&nbsp; &nbsp; return function (inner) {return inner + num};}var sum = addTo(1);document.write(sum(3));但是,这实际上只是Currying的一个版本,因此sum只会将提供的值添加到最初提供给addTo的内容中。如果要将所有数字从0添加到某个限制,只需要一个循环,不需要关闭:function&nbsp;sumTo(num)&nbsp;{ &nbsp;&nbsp; &nbsp;&nbsp;var&nbsp;total&nbsp;=&nbsp;0; &nbsp;&nbsp; &nbsp;&nbsp;for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<=&nbsp;num;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;total&nbsp;+=&nbsp;i; &nbsp;&nbsp;} &nbsp;&nbsp; &nbsp;&nbsp;return&nbsp;total;}document.write(sumTo(5));&nbsp;//&nbsp;15请注意,提供负数将导致无限循环,您应该防止这种情况(我将由您决定如何)。

隔江千里

也许你想使用递归而不是循环?function addTo(initial) {&nbsp; function add(adder) {&nbsp; &nbsp; if (initial < 100) {&nbsp; &nbsp; &nbsp; initial+=1&nbsp; &nbsp; &nbsp; return add(adder+initial)&nbsp; &nbsp; }&nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; return adder&nbsp; &nbsp; }&nbsp; }&nbsp; return add(initial)}document.write(addTo(1))只要初始值不超过100,它就会在+本身+ 1之前加上所有计算的总和。

幕布斯7119047

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

jeck猫

它看起来像addTo()函数返回另一个函数sum,它会将你传递给它的任何东西添加到原始数字中(或者我认为这就是你要写的东西;首先要做的是改变里面的语句add()来使用a&nbsp;+=而不仅仅是+为了make确定你保存结果)。由于你想要添加从2到100的每个数字(因为你已经传入1&nbsp;addTo()),尝试编写一个for从2到100&nbsp;的循环,将每个数字传递给sum()函数,将它们全部加在一起。这是一个例子:var&nbsp;sum&nbsp;=&nbsp;addTo(1);for&nbsp;(var&nbsp;i=2;&nbsp;i<100;&nbsp;i++)&nbsp;sum(i);var&nbsp;result&nbsp;=&nbsp;sum(100);这里我在循环后添加了100,因为我想获取最终结果。您也可以在循环中添加100并使用它sum(0)来获取结果而不在循环后更改它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript