js是单线程语言 任务需要排队执行经常会被卡主所以将任务分为同步任务和异步任务
同步任务:不需要等待的任务 如 let a = 1
异步任务:需要等待一会的任务 比如 setTimeOut,网络请求等
promise.resolve().then 发起的请求已经完成,但是很久不执行then
有的任务可以连贯执行有的任务不能连贯执行
异步任务分为了宏任务和微任务
宏任务:不需要立即连贯执行
script setTimeOut、setInterval、setImmediate
微任务:需要立即连贯执行 (需要等下一个宏任务执行前完成)
new Promise().then, process.nextTick
他们放在不同的EventTable中
宏任务放在 宏任务EventTable中,然后注册回调到Event Queue中等待执行
微任务放在 微任务EventTable中,然后注册回调到事件队列中等待执行
检查任务队列,先看微任务,没有微任务再看宏任务,有事件回调放入主线程执行
一次任务执行完成后 js会检查任务队列,先看有没有微任务,如果有的话就把微任务放到主线程中执行,如果没有微任务就再看有没有宏任务,如果有宏任务的话就把宏任务的事件回调,放到主线程中等待执行,