javaScript基础面试题 ---宏任务微任务

2023-11-04

1、JS是单线程语言
2、JS代码执行流程,同步执行完,再进行事件循环(微任务、宏任务)
3、清空所有的微任务,再执行宏任务
4、微任务:Promise.then 5、宏任务:setTimeout

事件循环:微任务、宏任务

向服务器发送的请求、定时器、事件 都会进入事件循环

一、为什么JS是单线程语言?

JS语言的一大特点就是单线程,也就是说,同一时间只能做一件事,那么,JS为什么不能有多个线程呢?这样能提高效率啊。

JS的单线程,与它的用途有关,作为浏览器脚本语言,JS的主要用途是与用户互动,以及操作DOM,这决定了它只能是单线程,否则会带来很复杂的同步问题,比如,假定JS同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

所以,为了避免复杂性,从一诞生,JS就是单线程,这已经成为了这门语言的核心特征,将来也不会改变。

二、JS是单线程,怎样执行异步代码?

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务,如果前一个任务耗时很长,后一个任务就不得不一直等着。

消息队列:消息队列是一个先进先出的队列,它里面存放着各种消息
事件循环:事件循环是指主线程重复从消息队列中取消息,执行的过程。

实际上,主线程只会做一件事,就是从消息队列里取消息,执行消息,再取消息,再执行,当消息队列为空时,就会等待直到消息队列变成非空,而且主线程只有在将当前的消息执行完后,才会去取下一个消息,这种机制就叫做事件循环机制,取一个消息并执行


题目:

在这里插入图片描述

答案:
3
3
3

分析:
1、for循环进入同步任务
2、setTimeout进入事件循环
3、先执行同步任务,执行完同步,执行事件循环

所以: for循环里面的i到3了,才开始执行定时器里面的打印,三个输出都是3


题目:

在这里插入图片描述

答案:
1 promise 1
2
微1
微2
1

分析:
同步任务:Promise内部、console.log(2)
微任务:Promise.then
宏任务:setTimeout
先执行同步去任务 :
1、Promise内部的:1 promise 1
2、console.log(2)的:2
进入事件循环,先执行微任务:
Promise.then里面的:微1、微2
再执行宏任务:
console.log(1): 1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javaScript基础面试题 ---宏任务微任务 的相关文章

随机推荐

  • python程序基础知识(三)python函数与模块

    目录 1 概述 2 python函数定义 3 函数的默认参数 4 函数的变量类型 5 函数的调用 6 函数的异常 7 python模块 1 概述 本节主要讲一下Python中的函数与模块 python之所以闻名于此 一个点便在于此它有大量并
  • 想学Python,却还记不住语法?神仙书籍 python背记手册双手奉上

    字节整理的这本手册把重点的语法和知识点都列出来了 不信你还看不懂 想学Python 却还记不住语法 神仙书籍 python背记手册双手奉上字节整理的这本手册把重点的语法和知识点都列出来了 不信你还看不懂 扫描下方二维码添加即可获取扫描下方二
  • 关于淘宝用户行为分析及其可视化案例

    目录 一 数据导入 二 数据预处理 三 数据分析 漏斗模型分析 AARRR模型分析 Acquisition 获取 游戏行业需要分析DNU DOU DAU Activation 活跃度 计算跳出率 计算关键页跳出率 时间维度分析用户活跃度情况
  • 【转载】ESP8266 基ESP8266_RTOS_SDK (ESP-IDF )中嵌入网页文件

    场景 在写ESP8266 web服务的时候 免不了要将自己设计的网页html和css等文件放入到固件中 在arduino中有fs可以进行上传文件 然后通过文件系统读出 那在ESP IDF中该怎么办呢 有几个思路 通过flash downlo
  • 手把手教你如何在Linux上彻底删除mysql

    1 先查看mysql安装情况 rpm qa grep i mysql 进入到你装mysql文件目录里面 cd usr local mysql 2 删除上图所有信息 rpm ev mysql community libs 5 7 32 1 e
  • postgre写sql时使用别的方法代替IN子句以提高查询效率

    两种方法 自测都好使 60s的执行时间缩短到了2s左右 我遇到的问题大概是这样 比如说我写了个sql select from student where name in lilei hanmeimei 这就是在student表查名字是lil
  • 一文看尽深度学习中的15种损失函数

    点击上方 计算机视觉工坊 选择 星标 干货第一时间送达 作者丨CVHub 来源丨CVHub 编辑丨极市平台 导读 本文详细介绍了深度学习中的各种损失函数的优点和局限性 在机器学习中 损失函数是代价函数的一部分 而代价函数则是目标函数的一种类
  • 常用断言方法

    1 断言是否相等 assertEqual a b msg 测试失败时打印的信息 断言a和b是否相等 相等则测试用例通过 assertNotEqual a b msg 测试失败时打印的信息 断言a和b是否相等 不相等则测试用例通过 2 断言是
  • 运行vue项目时报错defineConfig is not a function

    我遇到的这个问题的场景是这样的 我拉了一个比较早的项目是两年前的 那时候用的vue版本比较的 然后我直接在这个项目中配置代理 添加vue config js文件如下 然后运行vue项目就报错 个人感觉应该是vue cli service版本
  • MySQL:JDBC

    什么是JDBC JDBC Java DataBase Connectivity 称为 Java数据库连接 它是一种用于数据库访问的应用程序 API 由一组用Java语言编写的类和接口组成 有了JDBC就可以 用统一的语法对多种关系数据库进行
  • Tomcat7源码环境搭建

    一 下载Tomcat7源码 从官网上下载Tomcat源码 http mirror bit edu cn apache tomcat tomcat 7 v7 0 70 src apache tomcat 7 0 70 src zip 下载之后
  • vscode配置java环境,纯手把手教,有手就行

    vscode配置java环境 1 下载JDK Java Development Kit java开发工具 进入官网下载https www oracle com java technologies downloads 配置环境变量 检查电脑是
  • 08_Pandas提取含有指定字符串的行(完全匹配,部分匹配)

    08 Pandas提取含有指定字符串的行 完全匹配 部分匹配 以下内容 如何使用pandas提取含有指定字符串的行的方法进行解释说明 行的提取 选择 方法 完全匹配 部分匹配 str contains 包含一个特定的字符串 参数na 缺少值
  • 单片机——串口初探及串口+中断

    简介 设备间接线通信的一种方式 数据一位一位地顺序传送 双向通信 全双工 全双工 A向B发消息时 B也可以向A发消息 半双工 A向B发消息时 B不可以向A发消息 只有当A发完时 B才可以向A发消息 传送速度较慢 常用串口的电器标准协议 RS
  • CMMI资质查询

    http www cmmirz com https sas cmmiinstitute com pars pars aspx
  • C#学习之System.Collections.Generic 与 System.Collections 记录

    1 了解C 集合 System Collections 命名空间 System Collections 命名空间包含接口和类 这些接口和类定义各种对象 如列表 队列 位数组 哈希表和字典 的集合 类 类 说明 ArrayList 使用大小可
  • 自动按参数首字母排序参数

    public static string FormatBizQueryParaMap Dictionary
  • 关于Spring和SpringBoot中动态代理jdk以及Cglib 的区别和实现

    springboot2 x默认使用的代理是cglib代理 因为项目优化 打算写个日志的切面类 于是起了个springboot 工程 在这里面测试 结果在springboot 里面测试正常 能正确打印日志 但是把代码复制到实际项目中 在进入切
  • C++私有成员变量被对象直接访问

    C 访问控制 关键字private 它描述了对类成员的访问控制 使用类的对象方法可以直接访问私有成员函数和变量 类的对象即实例只能通过公共成员函数来访问私有变量和私有成员函数 因此公有成员函数成为对象的私有变量访问的桥梁 在c 中 在类的成
  • javaScript基础面试题 ---宏任务微任务

    宏任务微任务 一 为什么JS是单线程语言 二 JS是单线程 怎样执行异步代码 1 JS是单线程语言 2 JS代码执行流程 同步执行完 再进行事件循环 微任务 宏任务 3 清空所有的微任务 再执行宏任务 4 微任务 Promise then