【性能类】—JS运行机制

console.log(1)
setTimeout(function(){
	console.log(2)
},0)
console.log(3)

问:这道题打印顺序?
1 → 3 → 2

一、JS是单线程

  1. JS是单线程的,同一时间只能做一件事,运行栈只执行一个任务

二、任务队列

  1. 任务队列:同步任务在前面,异步任务在后面
  2. 异步任务分类:分为宏任务与微任务, 微任务优先级高于宏任务
  3. 微任务:process.nextTick, Promise, Object.observe(已废弃), MutationObserver(html5新特性)
  4. 宏任务:script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering
  5. 定时器模块:执行完定时器后放入宏任务,等待主线程执行,主线程执行完的时候,定时器模块就已经开始计时了;
  6. 多个定时器:根据定时器的秒数触发,秒数越小,越先触发; 秒数相同,前面的先触发
console.log('A')
while (true) {}
console.log('B')

只会输入A, 然后死循环

console.log('A')
setTimeout(function () {
     console.log('B')
}, 0)
while(1) {}

只会输入A, 然后死循环,因为任务队列需要等同步代码执行完,才会执行

for (var i =0; i< 4; i++) {
	setTimeout(function () {
		console.log(i)
	}, 1000)
}

问:会运行几次,输出结果是什么?
会运行四次,每次输出结果是4

  1. 循环是同步代码,setTimeout是异步代码
  2. 异步队列放入时间:等待1000毫秒时间到了,会把异步代码放入任务队列
  3. 等同步代码执行完再执行任务队列

在这里插入图片描述

在这里插入图片描述
event loop 指的是运作栈中执行完一个任务后,从任务队列取出一个任务放入运行栈中继续执行,直到所有任务队列的任务执行完成这个过程叫做 event loop

三、面试题解析

for (var i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i); // 3 3 3
  }, 1000);
}
// i = 0 , 遇到定时器1,挂起, i++ 
// i = 1, 遇到定时器2, 挂起, i++
// i = 2, 遇到定时器3, 挂起, i++
// i = 3  循环结束, 执行定时器1 , console.log(i) ,输出 3
// i = 3  循环结束, 执行定时器2 , console.log(i) ,输出 3
// i = 3  循环结束, 执行定时器2 , console.log(i) ,输出 3
let name;

setTimeout(() => {
  name = '梁峻荣';
  console.log(name); // 梁峻荣
}, 1000);

if (name) {
  name = 'jsliang';
  console.log(name);
}
// name = undefind , 遇到定时器, 挂起
// name = undefind , 不满足,跳过
// 同步任务结束后,1秒后,执行 name ='梁峻荣' ,打印 "梁峻荣"

for (var i = 0; i < 3; i++) {

}
for (let j = 0; j < 3; j++) {

}
console.log(i); 
console.log(j); 

参考书籍:
JavaScript异步编程:设计快速响应的网络应用

for (var i = 0; i <= 3; i++) {
  setTimeout(() => {
    console.log(i);
  }, 0);
}
// 打印 4, 4次

需要知道三件事

  1. 这里只有一个名为i的变量,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509574.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EasyDarwin 、ffmpeg 音视频推流拉流;OBS视频推理软件、obs-rtspserver服务器;python读取rtsp流

参考&#xff1a;https://blog.csdn.net/N71FS1/article/details/130019563 一、EasyDarwin ffmpeg ffmpeg 推送音视频流到rtsp流服务器 EasyDarwin 作为rtsp流服务器 &#xff08;下载&#xff1a;https://www.easydarwin.org/p/easydarwin.html&#xff09;OBS 直播音视频录…

为什么都说”一入Java深似海“?

引言 在当今数字化时代&#xff0c;编程已经成为一项至关重要的技能。而在众多编程语言中&#xff0c;Java以其广泛的应用领域和强大的功能特性&#xff0c;吸引了无数开发者的目光。无论是Web开发、移动应用还是大数据处理&#xff0c;Java都发挥着举足轻重的作用。然而&…

AI预测福彩3D第24弹【2024年4月2日预测--第6套算法开始计算第1次测试】

今天&#xff0c;咱们进行第6套算法测试&#xff0c;本套算法将结合012路直选共27种组合&#xff0c;同时考虑了对012路的和值进行统计分析。今天为第1次测试&#xff0c;好了&#xff0c;废话不多说了。直接上结果~ 仍旧是分为两个方案&#xff0c;1大1小。 经过人工神经网络计…

Windows server 2019搭建域服务(保姆版)

准备两台虚拟机&#xff1a;windows server 2019&#xff08;作为服务器&#xff0c;域管理员在此机器上&#xff09;&#xff0c;windows 10&#xff08;7、8、11都可以&#xff0c;作为域成员&#xff09;本文实验虚拟机时windows server 2019和windows10 前提&#xff0c;同…

IP广播网络音频解码播放终端SV-7101SIP-7101 SIP播放解码器

IP广播网络音频解码播放终端SV-7101SIP-7101 SIP播放解码器 一、描述 SIP-7101是我司的一款壁挂式SIP网络播放终端&#xff0c;具有10/100M以太网接口&#xff0c;配置一路继电器输出和一路线路输出&#xff0c;可将内部音源输出到外接功放&#xff0c;可实现广播播放功能。S…

非关系型数据库--------------Redis配置与优化

目录 一、关系型数据库与非关系型数据库 1.1关系型数据库 1.2非关系型数据库 1.2.1非关系型数据库产生背景 1.3关系型非关系型区别 二、Redis 2.1redis简介 2.2Redis命中机制和淘汰机制 2.3Redis 具有以下优点 2.3.1具有极高的数据读写速度 2.3.2redis支持丰富的数据…

GoogleNet神经网络介绍

一、简介 GoogleNet&#xff0c;也称为GoogLeNet&#xff0c;是谷歌工程师设计的一种深度神经网络结构&#xff0c;它在2014年的ImageNet图像识别挑战赛中取得了冠军。该神经网络的设计特点主要体现在其深度和宽度上&#xff0c;通过引入名为Inception的核心子网络结构&#x…

红酒:红酒的分类标准与市场细分

红酒的分类标准与市场细分是红酒产业中非常重要的概念。通过对红酒进行分类&#xff0c;可以更好地满足不同消费者的需求&#xff0c;提升红酒的市场份额和品牌影响力。 首先&#xff0c;红酒的分类标准可以根据不同的维度进行划分。常见的分类标准是根据葡萄酒的口感、香气、颜…

RK3588 NPU研究(一)

使用NPU进行AI计算&#xff0c;具体对应模型推理 对应代码位置 hardware/rockchip/rknpu2 examples: yolo5 编译 下载NDK工具https://developer.android.google.cn/ndk/downloads?hlzh-cn源码中使用16b&#xff0c;测试可以使用16/17/18/19/20&#xff0c;不可以使用21&…

开源代码分享(17)—基于yalmip+cplex的微电网优化调度(附matlab代码)

1基本概念 微网&#xff08;Micro-Grid&#xff0c;MG&#xff09;是进行电能调度时常见的概念&#xff0c;作为组织各分布式单元的结构。微网概念的提出旨在实现分布式电源的灵活、高效应用&#xff0c;解决数量庞大、形式多样的分布式电源并网问题[8]。微网中集成了电源、储能…

DS1302时钟芯片

目录 DS1302简介 前言 DS1302内部结构 理解&#xff1a; DS1302引脚图 DS1302常用寄存器 寄存器控制指令 解释&#xff1a; 常用寄存器指令 DS1302控制时序 单字节读 代码辅助理解 单字节写 代码辅助理解 仿真案例 电路图 keil文件 DS1302简介 前言 DS1302…

Pycharm环境配置完整教程

目录 python解释器下载 检查是否正确安装 Pycharm下载 Pycharm环境配置 本文主要介绍python解释器安装、Pycharm环境配置以及运行第一个程序的零基础的教程&#xff0c;即使是python小白也能正确配置相应的python学习环境哦&#xff01; python解释器下载 官网地址&#…

在jupyter notebook中使用conda环境

在jupyter notebook中使用conda环境 1. 环境配置 conda activate my-conda-env # this is the environment for your project and code conda install ipykernel conda deactivateconda activate base # could be also some other environment conda install nb_cond…

java学习之路-数组定义与使用

目录 ​编辑 1.什么是数组 2.数组的创建及其初始化 2.1数组的创建 2.2数组的初始化 3.数组的使用 3.1数组元素访问 3.2遍历数组 4.数组是引用类型 4.1jvm的内存分布 4.2基本类型变量与引用类型变量的区别 4.3引用变量详解 4.4 null 5.数组的使用场景 5.1存储数据 5…

【网课必备】学浪视频下载到本地

学浪作为知识付费平台&#xff0c;拥有大量的课程&#xff0c;所以很多人在学浪上购买自己的课程&#xff0c;但是学浪官方没有提供下载选项&#xff0c;只可以在学浪客户端软件观看&#xff0c;并不是很方便 于是为了解决这一个需求&#xff0c;小白老师s开发了学浪视频下载到…

uniapp 开发之原生Android插件

开发须知 在您阅读此文档时&#xff0c;我们假定您已经具备了相应Android应用开发经验&#xff0c;使用Android Studio开发过Android原生。也应该对HTML,JavaScript,CSS等有一定的了解, 并且熟悉在JavaScript和JAVA环境下的JSON格式数据操作等。 为了插件开发者更方便快捷的开…

verdi出现的问题

仿真时Verdi出现的问题&#xff1a; User Defined system task or function ($fsdbDumpfile) registered during elaboration and used within the simulation has not been registered during simulation. 解决方法&#xff1a;在run脚本中加上以下设置 又遇到如下问题&#x…

基于kmeans的聚类微博舆情分析系统

第一章绪论 1.1研究背景 如今在我们的生活与生产的每个角落都可以见到数据与信息的身影。自从上十世纪八十年代的中后期开始&#xff0c;我们使用的互联网技术已经开始快速发展&#xff0c;近些年来云计算、大数据和物联网等与互联网有相领域的发展让互联网技术达到了史无前例…

揭秘阿里巴巴面试题:JVM垃圾回收存活算法和两次标记过程

大家好,我是你们的小米。今天我们来聊聊一个热门话题,那就是阿里巴巴的面试题:JVM垃圾回收存活算法和两次标记过程。作为一个热爱技术、乐于分享的小米,我将会带领大家一起深入探讨这个话题。 引用计数法 首先,我们来了解一下引用计数法。这是一种简单直观的垃圾回收算法…

备战蓝桥杯---刷杂题1

1.来个小定理&#xff08;上次DP的青蛙过河用过&#xff09; 事实上&#xff0c;假如他们的gcd&#xff01;1,那么P,q都可以表示成gcd的倍数&#xff0c;因此假如一个数不是gcd的倍数就不可以表示&#xff0c;若互质由裴蜀定理大于一定时一定可以表示出。 事实上为&#xff08…