【发布时间】:2021-11-03 12:10:56
【问题描述】:
我看到了这个循环,但我不明白在第二个循环之后(当 I = 2 时)超时仍然是 4 秒而不是 7 秒。
- 第一个循环,i = 0,x = 0,1 秒后输出为 0 - 我明白为什么
- 第二个循环,i = 1,x = 1,4 秒后输出为 1 - 我明白为什么 3000 X 1 + 1000 = 4000(4 秒)
- 第三个循环,i = 2,x = 2,4 秒后输出为 2 - 为什么是 4 秒而不是 7? 3000 X 2 + 1000 是 7000(7 秒),但为什么我在 4 秒后得到输出,而不是 7 秒?
for (var i = 0; i <= 10; i++) {
(function(x) {
setTimeout(function() {
console.log(x);
}, 1000 + (3000 * x));
})(i);
}
【问题讨论】:
-
我每 3 秒查看一次控制台日志,从单击按钮后 1 秒开始...
-
@Cerbrus 这里也一样。代码似乎按预期运行,所有输出的间隔为 3 秒,偏移量均为 1 秒。
-
但是在第三个循环之后应该是 7 秒,不是吗?第三个循环, i = 2 , x = 2 , 4 秒后输出为 2 - 为什么是 4 秒而不是 7 ? 3000 X 2 + 1000 是 7000 ( 7 sec ) 但为什么我在 4 sec 而不是 7 后得到输出?
-
@AngusYoungus 距离开始 7 秒。不是来自上一次迭代。一个是距离开始 1 秒,一个是距离开始 4 秒,一个是距离开始 7 秒。它们之间有 4 秒。
-
@Ivar:它们之间有 3 秒。但除此之外,正确的,所有超时都在同一时刻开始。他们不会在前一个完成后开始。
标签: javascript for-loop timeout