【JS】JavaScript引擎的内部运行机制

3D视觉-结构光测量-线结构光测量 线结构光测量中,由激光器射出的激光光束透过柱面透镜扩束,再经过准直,产生一束片状光。这片光束像刀刃一样横切在待测物体表面,因此线结构光法又被成为光切法。线结构光测量常采用二维面阵CCD作为接受器件,因此只要通过增加垂直于面阵探测器的第三维度方向,就可以实现对三维物体的测量。 阅读详情


最近在复习JavaScript,看到setTimeout函数时,想起以前刚学时,在一本书上看过setTimeout()里的回调函数执行的间隔时间有昌不是后面设置的值,以前没想太多,网上看了JS大神的解释,整理记录下JavaScript引擎的内部运行机制。

首先看一段小程序:

<script>
      alert('第1');
      setTimeout(function(){alert('第2');}, 2000);
      alert('第3');
</script>

输出顺序是:第1,第3,第2;再来看一段小程序:

<script>
      alert('第1');
      setTimeout(function(){alert('第2')}, 0);
      alert('第3');
</script>

输出顺序还是:第1,第3,第2;为什么不是第1,第2,第3;setTimeout的间隔时间设置为0不就是立即执行吗?在此引出JavaScript的运行机制:Event Loop(貌似译为事件轮询)。


JavaScript的任务队列

        因为JavaScript是单线程的,所有的任务只能是一个接一个的执行,但是当遇像IO这样的读取一些大文件时就会出现后一个任务长时间处于等待状态,要等到前一个任务执行完才能开始后一个任务。

因为这样,JavaScript也设计为主线程可以先不管IO设备,先执行后面的任务,等IO设备返回了结果,再回去继续执行。

        因此,在JavaScript中,所有的任务可以分为两种:一是同步任务(synchronous);二是异步任务(asynchronous)。同步任务就是:在主线程上,必须等前一个任务执行完,才能执行后一个任务;异步任务则是:不进入主线程,而是进入“任务队列”(task queue)的任务,主线程只有在得到“任务队列”的通知,某个异步任务可以执行,该异步任务才会进入主线程执行。

其实“任务队列”就是一个事件的队列,主线程读取“任务队列”,就是读取里面的事件。这些事件一般包括IO设备的事件、点击、滚动事件,凡是指定过回调函数(callback),这些事件发生时就会进入“任务队列”。异步任务必须指定回调函数,主线程执行异步任务,就是执行对应的回调函数。

oText.innerText = '...';

比如在某一页面中,执行了上面这一代码后,DOM的内容会发生改变,接着系统触发DOM Changed事件,产生异步回调,回调函数被添加到“任务队列”中。


Event Loop

1.同步任务在主线程上执行会形成一个“执行栈”(execution context stack);

2.异步任务在“任务队列”里有运行结果就会在“任务队列”里置一事件(Event);

3.当“执行栈”中的同步任务都执行完后,“任务队列”中有运行结果(事件,比如:Mouse Clicks、Key Presses、定时事件等)的异步任务就会进入“执行栈”,开始执行;

主线程从“任务队列”读取事件的过程是不断循环的,这种机制就称为Event Loop。


Event Loop图解:

只有“执行栈”中任务执行完了,就会去读取“任务队列”,执行各事件相对应的回调函数。


现在应该明白开篇中,为什么setTimeout的间隔时间设置为0却最后执行了吧,因为要等“执行栈”中的代码执行完后,才会去执行“任务队列”中的回调函数。





Author:顾故

Sign:别输给曾经的自己






YOLOv11改进 | 引入DEConv细节增强卷积模块:恢复细节信息,提升小目标检测精度 摘要: YOLOv11在目标检测中面临小目标检测精度不足的问题,主要由于细节信息丢失。本文提出引入DEConv(细节增强卷积)模块,通过多分支卷积和残差连接恢复高频细节,提升小目标检测性能。DEConv结合3×3卷积与空洞卷积增强边缘信息,并自适应融合特征,兼容YOLOv11的P3层(小目标关键层)且计算高效。实验表明,该改进在无人机航拍、显微镜图像等密集小目标场景中显著减少漏检,同时保持轻量化和实时性优势。代码实现可直接嵌入现有YOLO架构,仅需替换P3层卷积模块。 阅读详情

相关推荐

ESP32搭配LVGL显示图片的两种方法详解:内部存储 vs 外部文件

本文详细介绍了ESP32搭配LVGL显示图片的两种方法:内部存储与外部文件。内部存储方案适合快速响应的小图片,而外部文件方案则适用于需要灵活更新和大容量图片的场景。通过对比分析,帮助开发者根据项目需求选择最优方案,提升嵌入式系统的UI性能。

weixin_30399821的博客 519

js内部事件机制--单线程原理

原文地址:https://www.xingkongbj.com/blog/js/event-loop.html http://www.haorooms.com/post/js_xiancheng https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/ 任务队列 主线程:正在执行的代码,会生成函数调用栈。 ma...

weixin_33726313的博客 148

用Zotero+B站Kimi,我如何把一篇顶会论文快速做成组会PPT(含完整提示词)

本文介绍如何利用Zotero和Kimi快速将顶会论文转化为组会PPT,提升学术汇报效率。通过Zotero的文献管理插件和Kimi的AI提炼技术,实现从论文阅读到PPT生成的全流程自动化,帮助研究者在90分钟内完成高质量汇报准备。

weixin_30955617的博客 502

JavaScript引擎的内部运行机制

JS的一大特点就是单线程,所谓单线程就是,同一时间内只能执行一个任务,执行完这个任务才能执行下一个任务。执行任务的这一条线程也可称为主线程。   为了不让CPU空下来去等待IO设备(如从后台获取数据),所以将任务分成了同步任务和异步任务。同步任务指在主线程上排队执行的任务,只有前一个任务执行完毕才能执行下一个任务。异步任务指不进入主线程的任务,而进入"任务队列"(task queue)的任务。...

忙着开花儿 284

数据基础设施建设任务中的技术名词解析

近日,国家数据局确定了18个数据基础设施建设任务(先行先试)承担地区,建设任务内容为:数场、数据空间、数据原件、隐私计算、数联网、区块链。这些概念都有什么样的内涵,他们的相互关系是怎样的?

五角大寨 5308

别再死磕DH参数了!用MATLAB Robotics Toolbox + SOLIDWORKS搞定六轴机械臂仿真(附避坑指南)

本文详细介绍了如何利用MATLAB Robotics Toolbox和SOLIDWORKS进行六轴机械臂仿真,避免常见的DH参数错误和模型导出问题。通过实战指南和避坑技巧,帮助工程师实现从三维建模到运动学仿真的无缝衔接,提升仿真效率和准确性。

weixin_27066963的博客 395

JavaScript语言内部机制概念整理(一)

JavaScript语言内部机制概念整理 第四章 4.1.3参数传递方式 ECMAScript中所有函数的参数都是按值传递,把函数外部的值复制给函数内部的参数,如同把值从一个变量复制到另一个变量。 基本类型值的传递如同基本类型变量的复制,被传递的值会被复制给一个局部变量; 引用类型值的传递如同引用类型变量的复制,把值在内存中的地址复制给一个局部变量(局部变量的变化会反映在函数外部)。

Rommel12的博客 520

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8261

微信小程序极简入门(八)--逻辑层(.js)

小程序 逻辑层

一个真实、有温度的无名小卒 3434

MinerU 系列教程 | 第二课:快速上手 -- 安装与第一次解析

本篇教程作为的第二课,将带你从零完成 MinerU 的环境搭建、模型下载,并成功运行第一次文档解析。上一课我们从宏观视角认识了 MinerU,本课开始正式动手实践。

weixin_43674738的博客 302

OpenCV实战(1)——OpenCV与图像处理基础

OpenCV 是一个跨平台计算机视觉和机器学习库,实现了图像处理和计算机视觉方面的很多通用算法。本节将介绍 OpenCV 的基础知识,以及如何编译运行 OpenCV 程序,并介绍如何完成最基本的图像处理任务——读取、显示和保存图像。除此之外,鼠标事件和图形绘制也是 OpenCV 计算机视觉项目中常用的基本功能,本节介绍了如何使用这两个重要的 OpenCV 功能。

盼小辉丶的博客 12万+

从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。 ----------超长文+多图预警,需要花费不少时间。---------- 如果看完本文后,还对进程线程傻傻分不清,不清楚浏览器多进程、浏览器内核多线程、JS单线程、JS运行机制的区别。那么请回复我,一定是我写的还不够清晰,我来改。。。 ----------正文开始---------- 最近发现有不少介绍JS单线...

nicexibeidage的博客 292

Python 爬虫实战:爬取哔哩哔哩知识区,抓取高赞课程信息

哔哩哔哩(Bilibili)是一个广受欢迎的综合性视频社区,其中的知识区汇聚了大量优质的教育、科普、技术等课程内容。本文将指导读者如何使用 Python 爬虫技术从哔哩哔哩知识区抓取高赞课程信息,并进行数据分析。本文深入探究了利用 Python 爬虫技术从哔哩哔哩知识区抓取高赞课程信息的全流程。从前期的环境搭建、模拟登录,到核心的课程数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。通过此方法所获取的数据,能够助力创作者优化内容、用户发现优质课程、平台洞察用户需求。

u014481728的博客 1137

【朴灵评注】JavaScript 运行机制详解:再谈Event Loop

【原帖:http://www.ruanyifeng.com/blog/2014/10/event-loop.html作者:阮一峰】 一年前,我写了一篇《什么是 Event Loop?》,谈了我对Event Loop的理解。 上个月,我偶然看到了Philip Roberts的演讲《Help, I'm stuck in an event-loop》。这才尴尬地发现,自己的理解是错的。我决...

Kubernetes云计算的专栏 573

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaScript 运行机制详解:再谈Event Loop

原文地址:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一年前,我写了一篇《什么是 Event Loop?》,谈了我对Event Loop的理解。 上个月,我偶然看到了Philip Roberts的演讲《Help, I'm stuck in an event-loop》。这才尴尬地发现,自己的理解是错的。我决定重写这个题...

83

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

html的运营原理,Js基础知识(四) - js运行原理与机制

js运行机制本章了解一下js的运行原理,了解了js的运行原理才能写出更优美的代码,提高运行效率,还能解决开发中遇到的不理解的问题。进程与线程进程是cpu资源分配的最小单位,进程可以包含多个线程。 浏览器就是多进程的,每打开的一个浏览器窗口就是一个进程。线程是cpu调度的最小单位,同一进程下的各个线程之间共享程序的内存空间。可以把进程看做一个仓库,线程是可以运输的货车,每个仓库有属于自己的多辆货车为...

weixin_42467508的博客 238

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JavaScript高级一

qqq

桃子彩虹无限的博客 237

[转载]JavaScript 运行机制详解:再谈Event Loop

https://app.yinxiang.com/shard/s8/sh/b72fe246-a89d-434b-85f0-a36420849b84/59bad790bdcf6b0a66b8b93d5eacbead 【原帖:http://www.ruanyifeng.com/blog/2014/10/event-loop.html作者:阮一峰】 一年前,我写了一篇《什么是 Event...

weixin_30830327的博客 79

浏览器在初始化JS 环境时都发生了些什么

原文:https://segmentfault.com/a/1190000005754797 1.用 C/C++ 构造内部数据结构创建一个 OP 即(Object.prototype)以及初始化其内部属性但不包括行为。 2.用 C/C++ 构造内部数据结构创建一个 FP 即(Function.prototype)以及初始化其内部属性但不包括行为。 3.将 FP 的[[Prot...

weixin_30784945的博客 143

探究JS中的连等赋值问题

一、引子 最近在看别人的博客时无意中看到一个这样的问题 var a = {n: 1}; var b = a; a.x = a = {n:2}; console.log(a.x); //undefined console.log(a); // {n: 2} console.log(b); // {n: 1, x: {n: 2}} 这是一个典型的连等赋值问题,是不是发现打印的结果跟自己预料的...

weixin_33857230的博客 138

js引擎内部运行机制 Event loop

js引擎内部运行机制 Event loop

weixin_47013797的博客 126
上一篇: 【jQuery】仿淘宝五星评价打分的实现
下一篇: 【JQuery】jQuery自制简易手风琴效果(附实现原理)
励志故事
博客等级 码龄12年 99粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值