理解setTimeout的执行方式
console.log( "a" ); //[1]
setTimeout(function() {//[2]
console.log( "c" )
}, 500 );
setTimeout(function() {//[3]
console.log( "d" )
}, 300 );
setTimeout(function() {//[4]
console.log( "e" )
}, 200 );
console.log( "b" ); //[5]
js在执行的过程中对不同的任务会有不同的处理方法。这里的任务分成两种:
1.同步任务。如上面的代码中的[1] [5]
2.异步任务。如上面的代码中的[2] [3] [4]
整个代码的执行可以这样理解:
第一步:扫描。 用一个扫描仪从上向下逐个地分析任务。
如果遇到同步任务,则直接把按先后顺序放到主线程中,这个过程会形成一个栈。
如下:
[1] ----> [2]
如果遇到异步任务,则放到一个额外的 任务队列 中。按setTimeout的时间参数从小到大放置:
[4] ---> [3] ----> [2]
第二步:执行。先把主线程中的任务做完,等到主线程中的任务全部完成之后,则再去做任务队列中的任务。