首页 > 原生js循环展示dom_【前端面试】用一道题讲 js 的事件循环队列

原生js循环展示dom_【前端面试】用一道题讲 js 的事件循环队列

昨天去面了滴滴,一口气面了三面,考了 promise 和事件循环。之前的猿辅导也考察了这些,几乎所有的大厂中厂都一定会考原生 js 的事件循环队列。

今天,我把昨天考察的原题拿出来分析一下。

setTimeout

浏览器是多线程的,js 是单线程的(因为多线程操作同一个 dom 会有数据不一致的问题),但 js 又支持异步,因此异步就是在 js 主线程有空的时候才去执行某个存放在队列里面的任务,任务又分为微任务和宏任务,只要微任务队列里面有任务,那么微任务就会优先执行,否则依次执行宏任务队列里的任务。

那么根据上面这些理论

有两个 setTimeout,属于宏任务,直接把里面的内容放入宏队列,注意,宏队列目前是:

任务1

显然,代码要先输出主线程中的 6,然后再执行宏任务队列里面的任务。

拿出宏任务1,输出1,看到里面有 promise,把 then 后面的内容放进微任务里面。

此时,微任务队列为:

任务1:console.log(2)

微任务有任务,优先执行,输出 2,又把 5 放入微任务。

任务1:console.log(5)

拿出来,再次输出5。此时微任务队列里面没东西了,再拿出宏任务里面的任务2。

输出 3,把 then 后面的放入微任务,拿出来,输出 4。

也就是结果为 6 1 2 5 3 4

859e4c783ce68188d8abc36844997096.png

如果我们稍微改动一下题目,

setTimeout

结果为:

70f838b9d1be8801433d56040ff96260.png

更多相关:

  • 检查是否安装redis(没有请自行百度安装): phpinfo: 配置thinkphp-queue,没有请执行 composer require topthink/think-queue 加入: 创建 队列 文件: use thinkQueue;class TestQueue {// 测试public function que...

  • 要实现计划任务,首先通过在配置类注解@EnableScheduling来开启对计划任务的支持, 然后在要执行计划任务的方法上注解@Scheduled,声明这是一个计划任务 示例:计划任务执行类 在这个类中的方法上需要@Scheduled注解配合@EnableScheduling使用。 package cn.hncu.p3.p3_ta...

  • cron:计划任务,是任务在约定的时间执行已经计划好的工作,根据配置文件约定的时间来执行特定的任务。 编写测试类继承 IJob ,实现Execute 此方法就是用于定时的任务 配置定时时间: 先创建windows服务,服务创建详情 InstallUitil创建服务 服务创建成功后开起服务即可进行定时任务的执行 定时任务执行结果:...

  • 站立会议:       继续数据库的连接编程。 任务进度:       实现数据的输出。 站立会议照片: 任务看板: 燃尽图: 转载于:https://www.cnblogs.com/cpljlgs/p/5546157.html...

  • 使用队列实现栈的下列操作: push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空 队列的特点:先入先出 栈的特点:后入先出 即我们每次添加元素到队列时,想要达到栈的效果,则需要调整当前元素到队列头部 方法一:双队列 一个临时队列保存push进去的元素,将...

  • Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。   Deque在Q...

  • 网络流量队列优先级相关知识点 Qdisc(quick disconnect)快速分离,断开;是一种排队规则,实现对流量的优先级管理.   涉及随机公平队列,令牌桶过滤器,分层令牌桶,FIFO, /*  *CopyRight (c) 2014-02-05 by Ruiy use to CopyLift!!!!  * */   ...

  • 全卷积网络(FCN) 1.全卷积神经网络介绍 FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的fea...

  • printf()函数优点在于可以格式化输出 格式:   %['padding_character][-][width][.precision]type   所有的转换说明都是以%开始,如果想打印一个%符号,必须用%% ;   参数“'padding_character”是可选,它将被用来填充变量直至所指定的宽度,该参...

  • 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。 输入格式: 输入在一行中给出一个长度不超过10000的、仅...

  • 给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。 输入样例:...

  • python面试题目 原文地址:https://www.usblog.cc/blog/post/justzhl/b5cc9a05c7d2 问题一:以下的代码的输出将是什么? 说出你的答案并解释。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Parent(object):     x...