首先JS是单线程的,也就意味着同一时间内只能做一件事,但是这并不意味单线程就是阻塞,而实现单线程非阻塞的方法就是事件循环
JS所有任务中又分为同步任务跟异步任务:
①同步任务:立即执行的任务,同步任务一般会直接进入到主线程中执行
②异步任务:异步任务的执行,比如Ajax网络请求,setTimeout定时器等等
同步任务与异步任务的运行流程图如下:
JS它会先执行同步任务,然后执行异步任务,异步任务又分为宏任务跟微任务,遇到异步微任务则将微任务放入微任务队列中,遇到宏任务则将宏任务放在宏任务队列中,同步任务执行完毕之后再去异步任务中先执行微任务后执行宏任务,一直循环至所有任务执行完毕
宏任务跟微任务的关系如图所示:
常见的微任务有:promise.then(),Node.js-nextTick
常见的宏任务有:定时器,Ajax,事件函数