`setTimeout(func, 0)` 和 `setTimeout(func, 1)` 是否被视为相同?

5
以下是一些使用 setTimeout 的简单 Javascript 代码示例:

function setTimeouts() {
  setTimeout(function() { console.log(2); }, 2);
  setTimeout(function() { console.log(1); }, 1);
  setTimeout(function() { console.log(0); }, 0);
}

for (var i = 0; i < 10; i++) {
  setTimeouts();
}

当我在Chrome或Node.js上运行时,结果类似:
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
2
2
2
2
2
2
2
2
2
2

您可以看到所有超时时间为01的任务都在超时时间2之前,这正是我所期望的。

但是01混合在一起,似乎它们具有相同的超时时间。我期望的是所有01之前。

如何理解这个问题?


这是NodeJS还是Google Chrome?两者都有不同的计时器实现,它们在不同的地方被指定。 - Benjamin Gruenbaum
@Freewind:你为什么期望在“1”之前有一个“0”? - Sandeep Nayak
@Freewind:这是一场关于Node中事件循环的精彩演讲,可能会回答你的问题。https://www.youtube.com/watch?v=8aGhZQkoFbQ - Sandeep Nayak
我在那个问题下添加了一个答案:https://dev59.com/hGsy5IYBdhLWcg3wvgr7#37961816 - Freewind
1个回答

0

实际上,setTimeout的第二个参数有最小值限制。对于Firefox浏览器,该值为4毫秒。如果传递的值小于最小值,则使用最小值。

关于您的问题,我认为这篇文章很有帮助:http://javascript.info/tutorial/events-and-timing-depth


请在 Firefox 上运行 http://jsbin.com/cefowipadi/edit?html,js,console,output。具有较小超时的任务首先执行,即使它们 <= 4 - Freewind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接