Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
391 views
in Technique[技术] by (71.8m points)

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

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...