首页 文章

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

提问于
浏览
-1

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

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中:我认为通过将var b放在for循环中,它会在每个循环中使用var编号,并且因为每个循环都添加了1 .

在解决方案2中:我不明白为什么应该将数字添加到return函数以使其循环 . I.m.o.整个a()函数就像原始问题一样运行,而不仅仅是返回方法中的代码?显然不是,为什么?

3 回答

  • 2

    在第一个版本中, a() 仅被调用一次,因此 number++ 仅被调用一次 . 在第二个版本中,每次迭代都会调用 a() ,因此每次迭代都会调用 number++ . 所以在第一个版本中 b 始终是相同的功能,而在第二个版本中,每次调用 a() 时都会得到一个新函数 .

  • 0

    在(2)中,函数a的执行返回一个函数 . 每次执行此功能时,都会将1添加到全局变量编号中 .

    它和你写的时候一样:

    function b() {
      number++;
      return number;
    }
    
  • 0

    初始情况下的问题是,您只需通过调用 a() 一次增加一次数,然后返回一个只返回数字的函数 . 每当你拨打 b() 时,它将返回始终为1的数字 .

    在第一个解决方案中,您在每次迭代中调用 a() ,这将增加数字 . 然后函数 b 将返回由 a 递增的数字 .

    在第二个解决方案中,您基本上让 a 生成一次函数,然后调用每次迭代 b() ,它们都更新并返回数值 .

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

相关问题