【发布时间】:2020-01-02 06:16:57
【问题描述】:
在以下场景中,事件setTimeout 进入队列,只有在堆栈清空后,i = 3 才会打印 3 次
//ver1
for (var i = 0; i < 3; i ++ ) setTimeout(()=> console.log(i), 3)
以下将按顺序打印1 2 3,因为i 是在func x 中捕获的??
//ver2
for (var i = 0; i < 3; i++) {
(function x(i) {
setTimeout(() => {console.log(i)}, 30)
})(i);
}
为什么下面只打印一次2?
//ver3
for (var i = 0; i < 3; i++) {
function x(i) {
setTimeout(() => {console.log(i)}, 30)
}(i);
}
我对@987654332@ 和ver3 很困惑
编辑:
ver2 解释可以找到here。关于为什么ver3 只打印2 的任何见解?
【问题讨论】:
-
stackoverflow.com/questions/500431/…在这里您可以找到问题的答案
-
stackoverflow.com/questions/50615610/… 这里甚至可以更好地解释代码中发生的事情
-
但这并不能解释
ver3的行为
标签: javascript scope closures