目前我在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)。有帮助吗?我知道需要一个循环,但我不确定循环内部应该包含什么,以及如何使用闭包来实现目标。谢谢你们。
答案 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中的所有数字添加到某个限制,你只需要一个循环,不需要关闭:
function sumTo(num) {
var total = 0;
for (var i = 0; i <= num; i++) {
total += i;
}
return total;
}
document.write(sumTo(5)); // 15
&#13;
请注意,提供一个负数将导致无限循环,你应该防止这种情况(我会让你知道如何)。
答案 1 :(得分:0)
也许您想使用递归而不是循环?
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;
只要初始值不超过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()
来获取结果,而不会在循环后更改结果。