摘自:https://www.cnblogs.com/liangyin/p/9783342.html,谢谢作者分享!
任务队列
所有任务可以分成两种,一种是 同步任务(synchronous)
,另一种是 异步任务(asynchronous)
。
同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。
异步任务指的是,不进入主线程、而进入"任务队列"(task queue)
的任务,只有 "任务队列"
通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
所以,当在执行过程中遇到一些类似于 setTimeout
等异步操作的时候,会交给浏览器的其他模块进行处理,当到达 setTimeout
指定的延时执行的时间之后,回调函数会放入到任务队列之中。
当然,一般不同的异步任务的回调函数会放入不同的任务队列之中。等到调用栈中所有任务执行完毕之后,接着去执行任务队列之中的回调函数。
用一张图来表示就是: