【发布时间】:2020-01-08 05:57:08
【问题描述】:
在了解范围和闭包时,我发现了一篇让我感到困惑的文章 (https://wsvincent.com/javascript-scope-closures/)
如果我在块上包含一个 setTimeout 以在 for 循环内执行,我会在循环结束后得到 setTimeout 的输出。但是,如果我使用在循环内调用的自定义函数,则不会发生这种情况。
for (let i=1; i<=5; i++) {
console.log(i);
setTimeout(function(){
console.log("i: " + i);
},1000);
}
// Outputs
// 1
// 2
// 3
// 4
// 5
// "i: 1"
// "i: 2"
// "i: 3"
// "i: 4"
// "i: 5"
for (let i=1; i<=5; i++) {
console.log(i);
function count () {
console.log('i: ' + i);
}
count();
}
//Outputs
// 1
// "i: 1"
// 2
// "i: 2"
// 3
// "i: 3"
// 4
// "i: 4"
// 5
// "i: 5"
为什么先从 1 到 5 再记录 setTimeout?
【问题讨论】:
-
因为
setTimeout就是这样工作的——它会延迟执行
标签: javascript closures settimeout