Why doesn't setTimeout(.., 0) execute immediately?

放肆的年华 提交于 2020-01-10 04:09:05

问题


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

Why the inner instructions don't execute first, despite setting setTimeout time on 0? I use various times including 0/null and I'm wondering how to both retain setTimeout object and execute its instructions with the flow.


回答1:


Javascript code runs only on one thread. setTimeout schedules a function to run later. So in js when all currently running code finish its execution , event loop will look for any other event. So setTimeout( .. 0) will make code run after the current loop.

console.log("I'm message from outside timeout"); will be first scheduled to executued. As soon as it finish the setTimeout will be executed

So bottom line setTimeout(myfunction ,0) will run myfunction 0ms after currently executing function. & in your case the current execution loop is

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

If you add another console.log("I'm message from outside timeout1"); so current event loop will first log

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

before starting setTimeout function.

NOTE setTimeout has a minimum timeout of 4ms . You can look at this Stackoverflow thread to know more about it



来源:https://stackoverflow.com/questions/36904773/why-doesnt-settimeout-0-execute-immediately

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!