4 回答
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
请注意,提供负数将导致无限循环,您应该防止这种情况(我将由您决定如何)。
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之前加上所有计算的总和。
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
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)
来获取结果而不在循环后更改它。
添加回答
举报