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对象并使用流程执行其指令。
答案 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以了解有关它的更多信息