0

我认为 setTimeout 中的所有函数都是在全局范围内执行的。然后我今天看到了这个:

 for(let x = 0; x < items.length; x++){
          setTimeout(function() {
                console.log(x);
          })
 }

即使在全局范围/窗口范围内有 x 的值;此代码控制台从 0 到 9。我在这里缺少什么。这个函数不应该在全局范围内运行吗?

为什么使用 let 而不是 var 会改变以前的事实?

4

1 回答 1

0

你引用的文章是错误的。

setTimeout 变量在全局范围内执行

1) 什么是 setTimeout 变量?他们的意思是“setTimeout 的第一个参数”吗?

2) 变量不能被执行。它们的值可以被执行(如果它是一个函数)

3)某些东西不是“在范围内执行”,范围是根据词法确定的,因此对于某个功能,它总是相同的,无论您如何以及在何处执行它都无关紧要。

4)在下面的代码片段中,他们说它“在全局范围内执行”,因为this指向窗口。这与范围无关,这是上下文。

现在回答你的问题:

这个函数不应该在全局范围内运行吗?

不,它在 for 循环的块范围内运行,因为它在该块的“内部”。

为什么使用 let 而不是 var 会改变以前的事实?

这与块/函数范围之间的区别有关,请在此处阅读。

于 2018-08-01T10:51:30.457 回答