9
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.

4

1 Answer 1

7

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

Sign up to request clarification or add additional context in comments.

3 Comments

The way you explain the order is confusing. setTimeout itself is executed before the console.log, only the function passed to it is scheduled.
Regarding "…minimum timeout of 4ms", that is not necessarily true. The current WHATWG spec says "… after five such nested timers, however, the interval is forced to be at least four milliseconds". So the minimum delay is whatever the implementation has it set to.
Yes, the "4ms minimum" is very misleading. Here's a fiddle to verify: jsfiddle.net/pgjbn8o5

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.