JavaScript循环返回意外结果

Lel*_*ina 3 javascript scope infinite-loop

任何人都可以告诉我为什么这个日志11,而不是9

function foo() {
  function bar(a) {         
    i =3;
    console.log( a + i );     
  } 

  for (var i=0; i<10; i++) { 
    bar( i *2 ); 
    //I know, infinite loop
  } 
} 

foo();
Run Code Online (Sandbox Code Playgroud)

如果i是硬编码bar(){},记录的结果不应该是9吗?

这是Scope类的一部分,我迷失了.

谢谢.

Ber*_*rgi 6

在第一次迭代,i0比较小的10.0(2 * i)被传递abar.i设置为3,然后总和3.

在下一迭代中,i被递增到4(这仍然是小于10),则8(2 * i)作为被传递abar.i重置为3,然后总和11.

下一次迭代是一样的,i从增量34再等等.

你的误解似乎是a因为改变而没有改变的价值,i首先评估乘法.或者您只是错过i++了循环标题中的语句.

  • 我相信他陷入困境的部分(我能理解为什么)是因为他认为从那时起我就会认为`````````` (2认同)