setTimeout(func,0)`和`setTimeout(func,1)`是否一样?
这里有一些简单的Javascript代码使用setTimeout
:
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
你可以看到所有的任务超时0
和1
是在超时2
之前,这是我的预期。
但是0
和1
是混合在一起的,好像他们有相同的超时时间。 我期望的是1
之前的所有0
。
如何理解这一点?
实际上,setTimeout的第二个参数具有最小值限制。 对于Firefox来说,这个值是4ms。 如果通过的值小于最小值,则将使用最小值。
关于你的问题,我认为这篇文章是有帮助的: http : //javascript.info/tutorial/events-and-timing-depth