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类的一部分,我迷失了.
谢谢.
在第一次迭代,i是0比较小的10.0(2 * i)被传递a给bar.i设置为3,然后总和3.
在下一迭代中,i被递增到4(这仍然是小于10),则8(2 * i)作为被传递a到bar.i重置为3,然后总和11.
下一次迭代是一样的,i从增量3到4再等等.
你的误解似乎是a因为改变而没有改变的价值,i首先评估乘法.或者您只是错过i++了循环标题中的语句.