Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在for循环终止后调用函数会导致索引变量相同?_Javascript - Fatal编程技术网

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 )