我认为 setTimeout 中的所有函数都是在全局范围内执行的。然后我今天看到了这个:
for(let x = 0; x < items.length; x++){
setTimeout(function() {
console.log(x);
})
}
即使在全局范围/窗口范围内具有 x 值;此代码控制台从 0 到 9。我在这里缺少什么。这个函数不应该在全局范围内运行。
为什么使用 let 而不是 var 改变了以前的事实?
你引用的那篇文章是错误的。
setTimeout 变量在全局作用域中执行
1) 什么是 setTimeout 变量?他们的意思是“setTimeout 的第一个参数”吗?
2) 变量不能被执行。它们的值可以被执行(如果是函数的话)
3)某些东西不是“在范围内执行”,范围是按词法确定的,因此对于某个函数它总是相同的,无论您如何以及在何处执行它都无关紧要。
4)在下面的代码段中,他们说它“在全局范围内执行”,因为this
指向 window. 这与范围无关,那是上下文。
现在回答你的问题:
这个函数不是应该在全局范围内运行吗?
不,它在 for 循环的块范围内运行,因为它在该块的“内部”。
为什么使用 let 而不是 var 改变了以前的事实?
这与块/函数作用域之间的区别有关,请继续阅读此处。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句