【发布时间】:2019-01-08 21:06:50
【问题描述】:
我认为 setTimeout 中的所有函数都是在全局范围内执行的。然后我今天看到了这个:
for(let x = 0; x < items.length; x++){
setTimeout(function() {
console.log(x);
})
}
即使在全局范围/窗口范围内有 x 的值;此代码控制台从 0 到 9。我在这里缺少什么。这个函数不应该在全局范围内运行吗?
为什么用 let 代替 var 会改变原来的事实?
【问题讨论】:
-
不,
setTimeout回调不在全局范围内运行,除非您将此与setTimeout的函数回调和字符串回调之间的区别混淆了。您是否阅读过let上的文档并了解var和let之间的区别是什么? -
你期待什么?
-
我在这里读到了
http://javascriptissexy.com/javascript-variable-scope-and-hoisting-explained/,上面写着setTimeout Variables are Executed in the Global Scope,如果在window范围内提供x,我希望得到一个值,否则undefined
标签: javascript settimeout let scopes global-scope