为什么setTimeout(..,0)不立即执行?

时间:2016-04-28 03:32:21

标签: javascript settimeout

var timeout = setTimeout(function(){
     console.log("I'm message from timeout");
},0);

console.log("I'm message from outside timeout");

//1. I'm message from outside timeout
//2. I'm message from timeout

尽管设置setTimeout时间为0,为什么内部指令不会先执行?我使用各种时间,包括0 / null,我想知道如何保留setTimeout对象并使用流程执行其指令。

1 个答案:

答案 0 :(得分:6)

Javascript代码仅在一个线程上运行。 setTimeout计划稍后运行的函数。所以在js中当所有当前运行的代码完成执行时,event循环将查找任何其他事件。 因此setTimeout( .. 0)将使代码在当前循环之后运行。

console.log("I'm message from outside timeout");将首先安排执行。一旦完成,setTimeout将被执行

所以底线setTimeout(myfunction ,0)将在当前执行函数后运行myfunction 0ms。 &安培;在你的情况下,当前的执行循环是

console.log("I'm message from outside timeout");

如果你添加另一个console.log("我从外面的timeout1" m消息;); 所以当前事件循环将首先记录

I'm message from outside timeout
I'm message from outside timeout1

在开始setTimeout功能之前。

注意 setTimeout的最小超时时间为4毫秒。您可以查看此Stackoverflow thread以了解有关它的更多信息