setTimeout 中的所有函数不是都在全局范围内执行吗?

索拉布·蒂瓦里

我认为 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章