JS为什么忽略其他代码并且只返回执行

时间:2015-05-12 09:40:09

标签: javascript return

我得到的代码总是给出相同的结果:

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()函数就像原始问题一样运行,而不仅仅是返回方法中的代码?显然不是,为什么?

3 个答案:

答案 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(),它们都会更新并返回数值。

我希望这能澄清你遇到的问题。