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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With