【发布时间】:2020-06-08 01:53:48
【问题描述】:
for (var i = 1; i < 5; i++) {
console.log(i);
setTimeout(function() {
console.log(i);
}, 3000)
};
首先,此代码显示从 1 到 4 的数字,三秒后显示四个五。这不是一个明显的动作顺序。 我想输出应该是这样的:
1 //pause 3s
1
2 //pause 3s
2
3 //pause 3s
3
4 //pause 3s
4
我需要了解 JS 解释器的哪些内容才能给出正确答案? 问题根本不是关于闭包的
【问题讨论】:
-
你对
i有一个关闭。延迟调用采用它的最后一个值。 -
似乎 setTimeout 函数是 .阻塞,因此事件循环在完成之前不会继续。
-
第一个 1 2 3 4 基于
for循环内的日志。剩余的四个 5 是从循环启动的setTimeout打印出来的。 -
“这不是一个明显的动作序列”,是的。
setTimeout不会阻塞,循环在第一次超时执行之前完成。那时变量值已经增长到 5。此外,所有超时都是在不到一毫秒的时间内在循环中按顺序设置的,因此它们几乎会同时触发,因为它们设置了相同的延迟。 -
@Teemu,感谢您的仔细阅读和您的回答。是的,这是一个不清楚的关键点
标签: javascript variable-assignment