题目
· 描述event loop(事件循环 / 事件轮询)的机制,可画图
· 什么是宏任务和微任务,两者有什么区别?
· Promise有哪三种状态?如何变化?
知识点
· event loop(事件循环 / 事件轮询 )
1. JS是单线程运行的
2.异步要基于回调来实现
3.event loop就是异步回调的实现原理
· JS如何执行
1.从前到后,一行一行执行
2.如果某一行执行报错,则停止下面代码的执行
3.先把同步代码执行完,再执行异步
2异步:
异步 async 是相对于同步 async 而言的,同步就是一件事一件事的执行。只有前一个任务执行完毕,才能执行后一个任务。
js中使用:
当JS解析执行时,会被引擎分为两类任务,同步任务(synchronous) 和 异步任务(asynchronous)。
对于同步任务来说,会被推到执行栈按顺序去执行这些任务。
对于异步任务来说,当其可以被执行时,会被放到一个 任务队列 里等待JS引擎去执行。
当执行栈中的所有同步任务完成后,JS引擎才会去任务队列里查看是否有任务存在,并将任务放到执行栈中去执行,执行完了又会去任务队列里查看是否有已经可以执行的任务。这种循环检查的机制,就叫做事件循环。
同步任务:
指的是在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。
异步任务:
指的是不进入主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
**1. 同步和异步任务在不同的执行"场所",同步的进入主线程,异步的进入Event Table执行并注册函数。
JavaScript 执行机制:
主线程任务——>微任务——>宏任务
如果宏任务里还有微任就继续执行宏任务里的微任务,如果宏任务中的微任务中还有宏任务就在依次进行