1、不废话,上图先:(有伪码的哈...)
setTimeout( fn,... ) ----------------> 计时器队列(宏任务)
fileIO( fn,............ ) ----------------> 文件IO队列(宏任务)
ajax( fn,...............) ----------------> 网络IO队列(宏任务)
setImmediate(fn,.) ----------------> 微队列(微任务)(注1)
Promise.resolve().then(fn) -----> 微队列(微任务)(注2)
以上,所有的"fn",都会被"UI"线程包装成任务,丢给相应的线程,相应的线程会在合适的时候将这些任务丢入相应的队列,而"UI"线程会继续执行后续代码。(注3)
(注1):事后立即执行,nodejs中支持,但支持该函数的浏览器几乎没有了。(为啥没有,请看注2)
(注2):事后立即执行的绝佳替代,且,微任务被执行的优先级高于所有宏任务。
(注3):可粗解为:"UI"线程执行到以上语句,就会把"fn"丢进队列,先处理完剩余的事,回头再