JavaScript 知识梳理 [五] JS执行机制
了解JavaScript 执行机制,可以避免写出函数嵌套,回调,异步等导致数据使用上的未知问题,了解代码的执行顺序有助于问题得排查。
JavaScript 是单线程的,所以同一时间只能干一件事,那么做哪件事情,顺序怎么定的,这里要了解几个名词 :主线程(main thread),调用栈(call-stack),同步任务,异步任务,宏任务(macrotask/task),微任务(mircotask) 。所有要执行的任务都是按照既定规则按照顺序放在调用栈中等待主任务执行的。
同步任务 VS 异步任务
同步任务进入主线程,按照顺序依次执行,异步任务进入EventTable 并注册函数,当异步任务完成后会将注册的函数放入Event Queue,当主线程中的任务全部清空后,会将Event Queue 中的任务放入调用栈调用,即进入主线程执行,这样就实现了事件循环(EventLoop),那么怎么知道执行栈空了呢,这是JS 引擎干的事,我们自己不用监督。以下为盗图 画图我手残
注意一点是,异步任务的注册函数在对应操作执行完成后不是立即就被执行的,需要同步任务执行完成后才行奥。
宏任务 VS 微任务
宏任务:script
全部代码、setTimeout
、setInterval
、I/O
、UI Rendering
微任务:Process.nextTick(Node独有)
、Promise
关键点 :不同的任务类型会进入不同的 Event Queue ,首先进入整体代码宏任务,完成后执行所有微任务,然后再下一个宏任务,再是所有微任务,这样按照顺序执行,具体的通过代码分析吧。
====先开个头 督促自己====