Aren't all function in setTimeout executed in global scope?
我认为setTimeout中的所有函数都是在全局范围内执行的。今天我看到了:
1 2 3 4 5 | for(let x = 0; x < items.length; x++){ setTimeout(function() { console.log(x); }) } |
即使在全局作用域/窗口作用域中有x的值,此代码也可以从0控制台到9控制台。我这里缺少什么。这个函数不应该在全局范围内运行吗?
为什么使用let而不是var会改变以前的事实?
你引用的那篇文章是错的。
setTimeout Variables are Executed in the Global Scope
1)什么是setTimeout变量?他们的意思是"第一个设定时间的争论"?
2)无法执行变量。可以执行它们的值(如果它是函数)
3)某个东西不是"在作用域中执行的",作用域是通过词法来确定的,因此对于某个函数来说,它总是相同的,无论您如何以及在何处执行它都不重要。
4)在下面的代码片段中,他们说它"在全局范围内执行",因为
现在回答你的问题:
Isn't this function supposed to run in global scope?
不,它在for循环的块范围内运行,因为它在该块的"内部"。
How come using let instead of var changes the former fact ?
这与块/函数作用域之间的区别有关,请阅读这里。