Javascript 为什么在for循环终止后调用函数会导致索引变量相同?
在一次“初级”网络开发者访谈中被问到这个问题。他们问这项研究的成果是什么Javascript 为什么在for循环终止后调用函数会导致索引变量相同?,javascript,Javascript,在一次“初级”网络开发者访谈中被问到这个问题。他们问这项研究的成果是什么 var funcs = []; for ( var i = 0; i < 5; ++i ) { funcs.push(function ( ) { console.log("i = " + i); }); } funcs.forEach(function ( el ) { el(); }); 我发现这与导致闭包的for循环有关。但是,我仍然不明白表达式“I=“+I右侧的I是如何随着I的增量而更新的
var funcs = [];
for ( var i = 0; i < 5; ++i )
{
funcs.push(function ( ) { console.log("i = " + i); });
}
funcs.forEach(function ( el ) { el(); });
我发现这与导致闭包的for
循环有关。但是,我仍然不明白表达式“I=“+I
右侧的I
是如何随着I
的增量而更新的。如果它是console.log(I)
,我会理解,但是I
在数学表达式中这一事实不使该表达式成为r值吗????我从来没有听说过一种编程语言可以做这样的事情
i = 5;
y = 2 + i;
++i;
// now y is 8
这是一片混乱。社会不能这样运作 这是一个闭包,变量的作用域是函数级别,而不是块级别 因此,在for循环之后,
i
仍然被定义,其值为5,因为它是退出循环之前的最后一个值
控制台日志和字符串连接在forEach
中执行,因此i
已经有了它的值5
如果您想在块级别拥有一个变量,应该使用,但请记住这是javascript6的一个特性
for ( let i = 0; i < 5; ++i )
for(设i=0;i<5;++i)
在这种情况下,console.log中的i
将是未定义的,因为i
不再可访问此外,您可以阅读以下内容:
for ( let i = 0; i < 5; ++i )