JS执行机制(同步和异步)

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。

异步:在做这件事的同时,你还可以去处理其他事

他们的本质区别:这条流水线上各个流程的执行顺序不同。

同步任务

同步任务都在主线程上执行,形成一个执行栈。

异步任务

耗时的还有资源加载放到任务队列中

宏任务:setTimeout setInterval 微->宏(宏任务之前都会先检测微任务队列中有没有微任务,如果有先执行微任务) I/O

宏任务是指在主线程中执行的较大任务,通常包括以下几种:

  • setTimeout(): 定时器任务。
  • setInterval(): 定时重复任务。
  • I/O 操作: 例如文件读取、网络请求等。
  • UI 渲染: 浏览器的渲染任务。
  • script 的执行: 全局代码的执行。

微任务:Promise nextTick then() Promise的构造函数是同步任务,所以Promise.resolve是同步任务先执行,然后将then加入异步队列

微任务是相对较小的异步任务,通常在当前任务执行完毕后立即执行。主要包括:

  • Promise 的 then() 和 catch(): 当 Promise 状态改变时,相关的回调会被放入微任务队列。
  • MutationObserver: 用于监听 DOM 变动的 API。
  • queueMicrotask(): 将函数放入微任务队列。

await后面执行的都被加到了微任务队列里,后面的都是微任务

执行顺序

在 JavaScript 中,事件循环的执行顺序如下:

  1. 执行一个宏任务(例如执行全局代码)。
  2. 执行所有的微任务,直到微任务队列清空。
  3. 渲染 UI 更新(如果有的话)。
  4. 回到步骤 1,继续执行下一个宏任务。
console.log("Start"); // 宏任务setTimeout(() => {console.log("Timeout"); // 宏任务
}, 0);Promise.resolve().then(() => {console.log("Promise"); // 微任务
});console.log("End"); // 宏任务

结果:

Start
End
Promise
Timeout

先执行执行栈中的同步任务,将异步任务放到任务队列中

一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行。


事件循环:

由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop) 。

就是当一段代码进入主线程,然后主线程会抽离异步任务到任务队列,主线程的同步代码执行完以后去读取异步进行操作,然后异步不断有异步,不断出异步,这就是事件循环

执行栈把异步任务外包出去(交给浏览器来处理),在任务队列看到外包做完了,再拿回来

宿主环境

在 JavaScript 中,所谓的"宿主环境"指的是 JavaScript 代码运行的环境或平台。

JavaScript 是一种脚本语言,它需要一个宿主环境来执行。常见的 JavaScript 宿主环境包括:

  1. 浏览器环境:
    1. 浏览器是最常见的 JavaScript 宿主环境。
    2. 浏览器提供了 DOM(文档对象模型)、BOM(浏览器对象模型)等 API,供 JavaScript 代码与浏览器交互。
    3. 常见的浏览器宿主环境包括 Google Chrome、Mozilla Firefox、Safari 等。
  2. Node.js 环境:
    1. Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境。
    2. 它允许 JavaScript 代码在服务器端运行,并提供了文件系统、网络、数据库等 API。
    3. Node.js 环境使 JavaScript 可以用于后端开发、命令行工具、桌面应用程序等场景。
  3. 其他宿主环境:
  •  除了浏览器和 Node.js,JavaScript 也可以在其他环境中运行,如:
  1. IoT 设备 (如 Raspberry Pi)
  2. Apache Cordova (用于构建跨平台移动应用程序)
  3. React Native (用于构建跨平台移动应用程序)
  4. Electron (用于构建桌面应用程序)

不同的宿主环境提供了不同的 API 和功能,这意味着同一段 JavaScript 代码在不同的宿主环境中可能会有不同的行为和结果。开发者需要了解代码将在哪种宿主环境中运行,并编写相应的代码。

总之,宿主环境是 JavaScript 代码运行的平台或环境,它决定了 JavaScript 代码可以访问和使用哪些 API 和功能。了解不同的宿主环境特性是 JavaScript 开发的重要基础。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

asp.net core grpc快速入门

环境 .net 8 vs2022 创建 gRPC 服务器 一定要勾选Https 安装Nuget包 <PackageReference Include"Google.Protobuf" Version"3.28.2" /> <PackageReference Include"Grpc.AspNetCore" Version"2.66.0" /> <PackageR…

统信服务器操作系统a版e版【dde桌面限制登录次数】介绍

dde桌面登录规则、tty限制登录次数、ssh限制登录次数、ssh限制地点登录、本地限制终端登录、时间限制登录等内容 文章目录 功能概述功能介绍1.查看dde桌面登录规则2.tty限制登录次数3.ssh限制登录次数4.ssh限制地点登录5.本地限制终端登录6.时间限制登录 功能概述 限制dde桌面…

【计算机基础】用bat命令将Unity导出PC包转成单个exe可执行文件

Unity打包成exe可执行文件 上边连接是很久以前用过的方法&#xff0c;发现操作有些不一样了&#xff0c;并且如果按上述操作比较麻烦&#xff0c;所以写了个bat命令。 图1、导出的pc程序 如图1是导出的pc程序&#xff0c;点击exe文件可运行该程序。 添加pack_project.bat文件 …

自学前端的正确姿势是...

师傅带进门&#xff0c;修行在个人。 在前端自学成才的道路上&#xff0c;有些人走的很快&#xff0c;有些人却举步维艰。 为什么会这样子呢&#xff1f;因为他们没有掌握自学前端的正确姿势。 在介绍应该要怎样自学前端之前&#xff0c;首先来看下&#xff0c;自学前端容易…

vue-router路由(重定向,嵌套,动态路由匹配,命名,高亮,守卫)

一、前端路由的概念与原理 路由router就是对应关系。分为前端路由和后端路由。 1后端路由 后端路由指的是&#xff1a;请求方式、请求地址与function处理函数之间的对应关系。在node.js中&#xff0c;express理由的基本用法如下&#xff1a; const express require(expres…

【C语言从不挂科到高绩点】21-指针03-指针与函数【重点知识】

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程!! 本节将为大家讲解C语言中非常重要的知识点-指针: 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的同学想要考计算机等级证书的同学想…

死磕P7: JVM内存划分必知必会(一)

这是「死磕P7」系列第 001 篇文章&#xff0c;欢迎大家来跟我一起 死磕 100 天&#xff0c;争取在 2025 年来临之际&#xff0c;给自己一个交代。 JVM 内存区域划分是面试常考点&#xff0c;属于死记硬背型&#xff0c;比较让人头大的是不同版本的 JDK 具有不同的划分方式&…

Shopee虾皮双十大促:广告到底怎么做?需要使用动态代理吗?

在Shopee虾皮下半年的大促活动中&#xff0c;即将到来的10.10超级品牌节就是下半年各个超级购物节的其中一个&#xff0c;抓住本次大促的机会&#xff0c;卖家就有机会在更短的决策时间内实现更高的转化。大促期间最重要的环节之一就是广告投放&#xff0c;而广告投放又有什么技…

公司电脑监控都监控什么?可以看到员工摸鱼吗?电脑监控功能全解析!【2024年必看】

在这个数字化时代&#xff0c;企业对于信息安全和工作效率的追求日益增强。 公司业务规模的扩大&#xff0c;员工数量激增&#xff0c;如何有效管理员工行为、保障企业信息安全成为了每个管理者必须面对的重要课题。 于是&#xff0c;公司电脑监控成为了许多企业的选择&#…

全方位洗衣洗鞋小程序系统,重塑干洗店服务新体验;

全方位洗衣洗鞋小程序系统&#xff0c;重塑干洗店服务新体验; 一、核心功能革新&#xff1a; 1.多元化下单模式&#xff1a;融合上门取送、到店服务、寄存网点及智能衣柜四种便捷方式&#xff0c;用户轻松一键下单&#xff0c;享受个性化服务。 2.从下单到送回&#xff0c;全程…

从零开始讲DDR(3)——DDRC与DDRPYH

一、DDR的使用 在之前的文章中我们介绍了DDR的基本概念&#xff0c;但是DDR内存的操作不仅仅是简单的数据读取和写入&#xff0c;它包括许多时序要求和信号调度。为了让DDR内存有效运作&#xff0c;系统需要在逻辑层和物理层之间进行大量的协作。我们拿出一张DDR的操作简化状态…

YOLOv8改进,YOLOv8 Neck结构引入BiFPN

摘要 模型效率在计算机视觉中变得越来越重要。本文系统地研究了神经网络架构设计选择用于目标检测,并提出了几项关键优化以提高效率。首先,提出了一种加权双向特征金字塔网络(BiFPN),它允许轻松快速的多尺度特征融合;其次,提出了一种复合缩放方法,该方法同时均匀地缩放…

数通。。。

通信&#xff1a;需要介质才能通信电话离信号塔&#xff08;基站&#xff09;越远&#xff0c;信号越弱。信号在基站之间传递。你离路由器越远&#xff0c;信号越差。一个意思 比如想传一张图片&#xff0c;这张图片就是数据载荷 网关&#xff0c;分割两个网络。路由器可以是网…

对接空号检测平台可以降低成本吗

空号检测主要关注的是电话号码的状态&#xff0c;如是否为空号、停机、关机等&#xff0c;它并不直接针对语音助手进行拦截。 呼叫中心系统对接空号检测确实可以在一定程度上降低成本&#xff0c;主要体现在以下几个方面&#xff1a; 1.提高接通率&#xff1a;空号检测能够剔除…

一文搞懂MES与MOM系统的区别

随着制造业信息化的不断发展&#xff0c;越来越多的企业开始引入信息化系统来提升生产效率与管理能力。在众多系统中&#xff0c;制造执行系统&#xff08;MES&#xff09;与制造运营管理&#xff08;MOM&#xff09;是最常见且重要的两种系统。然而&#xff0c;许多人对这两者…

增强现实系列—Diffusion Time-step Curriculum for One Image to 3D Generation

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间一般没有紧密的关联关…

灾难级漏洞:阿里云盘可看别人隐私照?2亿用户或面临隐私泄露隐患

此次事件将阿里云盘的数据安全问题推至风口浪尖&#xff0c;对其品牌信誉和市场地位构成严峻挑战。 转载&#xff1a;科技新知 原创 作者丨江蓠 编辑丨蕨影 阿里云盘惊现灾难级别bug&#xff01; 9月14日晚&#xff0c;多名网友爆料称&#xff0c;可以在阿里云盘的相册中看到其…

三线城市的女玩家们不想“谈恋爱”,小游戏掘金新蓝海

女性玩家的游戏选项只有乙游吗&#xff1f; 在7月举办的微信小游戏开发者大会上&#xff0c;微信小游戏团队公布了一系列最新运营数据。数据显示&#xff0c;微信小游戏的用户规模已突破十亿大关。从用户画像来看&#xff0c;其年龄层主要集中在24至40岁之间&#xff0c;且三线…