主线程指的是JS引擎执行的线程 。这个线程只有一个 , 页面渲染、函数处理都在这个主线程上执行 。
工作线程这个线程可能存在于浏览器或JS引擎内 , 与主线程是分开的;处理文件读取、网络请求等异步事件 。
同步任务指的是在主线程上排队执行的那些任务 。只有前一个任务执行完毕 , 才能执行后一个任务 。
异步任务指的是由JavaScript委托给宿主环境(浏览器或Node.js)进行执行的任务 。当异步任务执行完成后 , 会通知JavaScript主线程执行异步任务的回调函数 。
举个例子:一个人吃完饭后看手机 , 看手机后聊八卦 , 这样按照顺序一步步来 , 等上一件事完了之后再执行后面事情的就是同步方式;而一个人在吃饭的同时 , 可以看手机和聊八卦 , 这样能做很多件事情的就是异步方式 。
任务队列主要分两种:宏任务和微任务 。
宏任务:每次执行栈执行的代码 。常见的宏任务主要包含:script(整体代码)、setTimeout、setInterval、I/O、异步Ajax、setImmediate(Node.js环境)等 。
微任务:当前宏任务执行结束后立即执行的任务 。常见的微任务主要包含:Promise.then(catch、finally)、MutaionObserver、process.nextTick(Node.js环境)等 。
好了 , 到这里事件循环机制里面相关的概念已在上面列出解释了 。其实通过上面的介绍可以得到下面这样一个图示:
任务进入执行栈 , 就会根据任务类型判断是同步任务还是异步任务 , 然后分别进入不同的执行环境 , 同步任务进入主线程 , 异步任务进入任务队列 。主线程内的任务执行完毕后 , 回去任务队列读取对应的任务 , 推入主线程执行 。上述过程不断重复就是事件循环 。
每一个宏任务执行完之后 , 都会检查是否存在待执行的微任务;如果有 , 则执行完所有微任务后再继续执行下一个宏任务;反之没有就直接执行下一个宏任务 。
根据上面图示可以得到事件循环机制的关键步骤 , 如下:
好啦 , JS事件循环的相关概念和流程顺序就介绍完了 。掌握概念之后 , 来看一些例子加深一下→
回到一开始提到面试题 , 那就看看它的执行结果是怎样的 , 分析如下:
下面来一个例子试试水:
分析过程 , 如下:
下面来一个经典的例子:
分析过程 , 如下:
将上面的经典改造一下 , 用最终完全体来结束示例:
分析过程 , 如下:
到这里 , JS事件循环机制示例相关的题和分析过程就介绍完了 , 想必通过上面的介绍你一定能对JS的事件循环机制有更深的理解 , 相信以后遇见其他类似的面试题也能迎刃而解了 。冲冲冲!→
最后 , xdm看文至此 , 点个赞再走哦 , 3Q^_^
【web前端面试题2022最全 web前端面试题2022】伙伴们 , 如果觉得本文对你有些许帮助 , 点个或者?个关注再走呗^_^ 。另外如果本文章有问题或有不理解的部分 , 欢迎大家在评论区评论指出 , 我们一起讨论共勉 。
推荐阅读
- 9~12岁儿童画端午节 7~8岁儿童画端午节
- 产前检查时间表和项目 产前检查时间表
- 梦见前妻是什么预兆
- 辽宁以前叫什么名字
- 提前批需要提前报名吗
- 汗蒸注意事项有哪些呢 汗蒸前后注意事项及禁忌
- 提前打窝是什么意思 鱼打窝是什么意思
- 手机怎么找以前复制的内容
- 抖音粉丝四千万以上的网红 全国大网红前100名
- 腊鸡是先洗了再腌吗 腊鸡腌之前要洗吗