目前,我在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)的和。有什么帮助吗?我知道需要一个循环,但我不确定应该在循环中放什么,以及如何使用闭包来实现目标。谢谢你们。
发布于 2016-04-06 10:08:18
目前我在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
请注意,提供负数将导致无休止的循环,您应该防止出现这种情况(我将把它留给您自己解决)。
发布于 2017-09-26 18:44:58
试一试
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
发布于 2016-04-06 10:35:45
也许你想使用递归而不是循环?
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之前将所有计算的总和相加。
https://stackoverflow.com/questions/36439904
复制相似问题