Javascript for loop with settimeout time change

Javascript for loop with settimeout time change

所以我试图增加 for 循环中的超时时间,我按照此处的答案 setTimeout with Loop in JavaScript 但是当我输出日期以检查时差.

代码:

for (var count = 0; count < 12; count++) {
    (function(num){setTimeout(function() {
        console.log("Count = " + num + " Time: " + 1000 * num + " Stamp: " + new Date());
    }, 1000 * num)})(count);
}

正如您在控制台中看到的那样,它仍然每 1000 触发 console.log 而不是 1000 * count

我希望以上内容有意义,希望有人能解释这种行为。

代码按预期运行。

所有定时器几乎同时设置,因为它们是异步的。因此,计时器已设置,代码会继续加载其他计时器,而无需等待代码执行。

第一个计时器将在 1 秒后关闭。

第二个定时器将在 2 秒后响起。但是定时器设置后两秒,与定时器1设置的时间相同。

以此类推

因此,每个计时器都在 1000 * 计数时触发。

这是您要找的吗?增加每次迭代的时间 1second * some count

let i = 0;
loop = () => {
  setTimeout(() => {
    console.log("Count = " + i + " Time: " + 1000 * i);
    i++;
    if (i < 10) {
      loop();
    }
  }, i * 1000)
};
loop();

这里有一个REPL,你可以打运行

解释:尝试运行使用此代码

for (var i = 1; i < 5; i++) {
    setTimeout(() => console.log(i), 1000)
} 

我们希望输出为 1 2 3 4 但实际上是 5 5 5 5,这是因为 js 运行time 引擎不等待 settimeout 完成,而是将其传递到网络 API 并在那里排队,因此 for 循环首先执行使 i = 5,然后在稍后的时间点 Web API 触发设置超时功能。这个你可以详细了解here