了解块范围

时间:2018-06-12 03:29:36

标签: javascript

我试着理解这段代码:

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之后才会被调用 - 为什么块范围现在很重要?

我很困惑,很乐意解释。

感谢。

0 个答案:

没有答案