同步任务和异步任务(微任务和宏任务)
JavaScript是一门单线程语言,分为同步任务和异步任务
同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。
异步任务指的是,不进入主线程、而进入"任务队列"的任务只有等主线程任务全部执行完毕,"任务队列"的任务才会进入主线程执行。而异步任务分为宏任务和微任务
macro-task(宏任务):包括整体代码script,setTimeout,setInterval,Ajax
micro-task(微任务):Promise,process.nextTick
(Promise并不是完全的同步,在Promise中是同步任务,执行resolve或者reject回调的时候,此时是异步操作,会先将then/catch等放到异步任务中的微任务队列)
执行过程:
1.先执行所有同步任务,碰到异步任务放到任务队列中
2.同步任务执行完毕,开始执行当前所有的异步任务
3.先执行任务队列里面所有的微任务
4.然后执行一个宏任务
5.然后再执行所有的微任务
6.再执行一个宏任务,再执行所有的微任务·······依次类推到执行结束。