我试着理解这段代码:
var funcs = [];
for (var i = 0; i < 5; i += 1) {
var y = i;
funcs.push(function () {
console.log(y);
})
}
funcs.forEach(function (func) {
func()
});
外出将是
5
5
5
5
5
我试着理解为什么。
如果它在循环的每个迭代中推送一个控制器y的匿名函数,那么它不应该推送控制台0的功能,控制台1的功能,控制台2的功能等等?
这就是我的逻辑所说的。显然输出是5倍5.
然后,如果是这样,我试着理解这个过程。它在循环的每次迭代中推送了什么?对'future'中的函数的引用将返回循环以查找y的值?
如果是这样,那么循环会运行5次吗?我认为循环运行一次,然后它应该推0,1,2 ......
所以我很困惑。 Javascript将如何执行此代码? 循环第一次运行时会发生什么?什么函数被推送到数组?
然后,当执行forEach循环时 - 发生了什么呢?在每次调用函数时 - y的值是多少?
我很困惑,因为如果var y = i;
不是let y = i
,那么它会记录0123 ......
但是为什么呢?如果无论如何第一个函数只有在y已经等于5之后才会被调用 - 为什么块范围现在很重要?
我很困惑,很乐意解释。
感谢。