JS事件循环/宏任务/微任务理解
2019-04-03
JS事件循环/宏任务/微任务理解
前段时间做了一道题,涉及到异步的执行,事件的处理,早期也只是粗略看过一些,没有详细去学习,导致做错了:( 现在来好好学一学
1.前言
当时的题目是:
1 | console.log('start') |
问:end会不会输出,为什么?
我的回答是会,当时的想法是JS执行完同步任务之后,处理异步任务,能够跳出while循环,然后打印end
结果是错的!
下面学习下JS对于事件的处理机制,学习自JS事件循环机制(event loop)之宏任务/微任务
2.学习
2.1 JS对于同步任务的处理
- 同步任务直接进入主线程运行
2.2 JS对于异步任务的处理
- 异步任务进入
Event Table
并注册回调函数 - 指定事件完成时,将函数移入
Event Queue
- 当主线程的任务执行完毕后,会从
Event Queue
读取对应的函数,进入主线程
2.3 上述过程的重复执行构成了事件循环机制
3.反思
回过头来看,同步任务while
进入主线程执行后并不会空闲,导致并不能从Event Queue
中读取任务来执行,所以并不会打印end
4.更多
更细致的来看微任务(MicroTask)、宏任务(MacroTask)的概念
emmmm.反正没人看,有空了接着记录一下