我得到的代码总是给出相同的结果:
var number = 0;
function a(){
number++; //outside return function
return function(){
return number;
};
}
var b = a(); //outside loop
for(i=0;i<10;i++){
console.log("loop: "+(i+1)+" :"+b());
}
我找到了这个解决方案(1):
var number = 0;
function a(){
number++; //outside return function
return function(){
return number;
};
}
for(i=0;i<10;i++){
var b = a(); //inside loop
console.log("loop: "+(i+1)+" :"+b());
}
显然我应该得到“正确”的解决方案(2):
var number = 0;
function a(){
return function(){
number++; //inside return function
return number;
};
}
var b = a(); //outside loop
for(i=0;i<10;i++){
console.log("loop: "+(i+1)+" :"+b());
}
在解决方案1中:我认为通过在for循环中放入 var b ,它会在每个循环中“刷新” var number ,并且因为每个循环都添加1个。
在解决方案2中:我不明白为什么应该将 number ++ 添加到return函数中以使其循环。 I.m.o.整个 a()函数就像原始问题一样运行,而不仅仅是返回方法中的代码?显然不是,为什么?
答案 0 :(得分:2)
在第一个版本a()
中只调用一次,因此number++
只调用一次。在第二个版本中,每次迭代都会调用a()
,因此每次迭代都会调用number++
。因此,在第一个版本中,b
始终是相同的功能,而在第二个版本中,每次拨打a()
时都会获得一个新功能。
答案 1 :(得分:0)
在(2)中,函数a的执行返回一个函数。 每次执行此函数时,都会将1添加到全局变量编号。
与你写的时候一样:
function b() {
number++;
return number;
}
答案 2 :(得分:0)
您最初的情况是,您只需通过调用a()
一次增加一次,然后返回一个只返回该数字的函数。只要您拨打b()
,它就会返回始终为1的号码。
在第一个解决方案中,您在每次迭代中调用a()
,这将增加数字。然后函数b
将返回a
递增的数字。
在第二个解决方案中,你基本上让a
生成一次函数,然后调用每个迭代b()
,它们都会更新并返回数值。
我希望这能澄清你遇到的问题。