广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >JavaScript运行机制是怎么样的
  • 829
分享到

JavaScript运行机制是怎么样的

2024-04-02 19:04:59 829人浏览 独家记忆
摘要

这篇文章主要介绍了javascript运行机制是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。js的运行机制1. js单线程Java

这篇文章主要介绍了javascript运行机制是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

js的运行机制

1. js单线程

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

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

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

2. js事件循环

js代码执行过程中会有很多任务,这些任务总的分成两类:

  • 同步任务

  • 异步任务

当我们打开网站时,网页的渲染过程就是一大堆同步任务,比如页面骨架和页面元素的渲染。而像加载图片音乐之类占用资源大耗时久的任务,就是异步任务。,我们用导图来说明: JavaScript运行机制是怎么样的 我们解释一下这张图:

  • 同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数。

  • 当指定的事情完成时,Event Table会将这个函数移入Event Queue

  • 主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。

  • 上述过程会不断重复,也就是常说的Event Loop(事件循环)。

那主线程执行栈何时为空呢?js引擎存在monitoring process进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数。

以上就是js运行的整体流程

需要注意的是除了同步任务和异步任务,任务还可以更加细分为Macrotask(宏任务)和microtask(微任务),js引擎会优先执行微任务

微任务包括了 promise 的回调、node 中的 process.nextTick 、对 Dom 变化监听的 MutationObserver。

宏任务包括了 script 脚本的执行、setTimeout ,setInterval ,setImmediate 一类的定时事件,还有如 I/O 操作、UI 渲
染等。

面试中该如何回答呢? 下面是我个人推荐的回答:

  1. 首先js 是单线程运行的,在代码执行的时候,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行。

  2. 在执行同步代码的时候,如果遇到了异步事件,js 引擎并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务

  3. 当同步事件执行完毕后,再将异步事件对应的回调加入到与当前执行栈中不同的另一个任务队列中等待执行。

  4. 任务队列可以分为宏任务对列和微任务对列,当当前执行栈中的事件执行完毕后,js 引擎首先会判断微任务对列中是否有任务可以执行,如果有就将微任务队首的事件压入栈中执行。

  5. 当微任务对列中的任务都执行完成后再去判断宏任务对列中的任务。

最后可以用下面一道题检测一下收获:

setTimeout(function() {
  console.log(1)}, 0);new Promise(function(resolve, reject) {
  console.log(2);
  resolve()}).then(function() {
  console.log(3)});process.nextTick(function () {
  console.log(4)})console.log(5)

第一轮:主程开始执行,遇到setTimeout,将setTimeout的回调函数丢到宏任务队列中,在往下执行new Promise立即执行,输出2,then的回调函数丢到微任务队列中,再继续执行,遇到process.nextTick,同样将回调函数扔到为任务队列,再继续执行,输出5,当所有同步任务执行完成后看有没有可以执行的微任务,发现有then函数和nextTick两个微任务,先执行哪个呢?process.nextTick指定的异步任务总是发生在所有异步任务之前,因此先执行process.nextTick输出4然后执行then函数输出3,第一轮执行结束。 第二轮:从宏任务队列开始,发现setTimeout回调,输出1执行完毕,因此结果是25431

感谢你能够认真阅读完这篇文章,希望小编分享的“JavaScript运行机制是怎么样的”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网VUE频道,更多相关知识等着你来学习!

--结束END--

本文标题: JavaScript运行机制是怎么样的

本文链接: https://www.lsjlt.com/news/96179.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript运行机制是怎么样的
    这篇文章主要介绍了JavaScript运行机制是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JS的运行机制1. js单线程Java...
    99+
    2022-10-19
  • JavaScript运行机制及原理是什么
    这篇文章主要介绍“JavaScript运行机制及原理是什么”,在日常操作中,相信很多人在JavaScript运行机制及原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • 怎样掌握JavaScript执行机制
    本篇文章为大家展示了怎样掌握JavaScript执行机制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、为什么JavaScript是单线程如果想了解JavaScr...
    99+
    2022-10-19
  • JavaScript运行时Bun的性能怎么样
    这篇文章主要介绍“JavaScript运行时Bun的性能怎么样”,在日常操作中,相信很多人在JavaScript运行时Bun的性能怎么样问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-19
  • 《Mysql是怎样运行的》
    客户端查询mysql版本:select version(); 1 第 1 章 装作自己是个小白 - 重新认识 MySQL 1.1 MySQL 的客户端/服务器架构 每个进程都有一个唯一的编号...
    99+
    2023-09-12
    mysql 数据库
  • 深入阐述JavaScript的运行机制
    JavaScript是一种流行的编程语言,它几乎被用于网站和应用程序的开发中。对于初学者和许多开发人员来说,JavaScript似乎是单线程的,这意味着它只能同时执行一个任务。然而,JavaScript到底是不是真的单线程呢?这是一个有争议...
    99+
    2023-05-14
  • java运行机制指的是什么
    这篇文章给大家分享的是有关java运行机制指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java程序运行时,必须经过编译和运行两个步骤:首先将后缀名为java的源文件进行编译,最终生成后缀名为.clas...
    99+
    2023-06-06
  • java中MyBatis的运行机制是什么
    今天就跟大家聊聊有关java中MyBatis的运行机制是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程...
    99+
    2023-06-14
  • JS的运行机制原理是什么
    本篇内容主要讲解“JS的运行机制原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS的运行机制原理是什么”吧!代码块: JS中的代码块是指由<script>标签分割...
    99+
    2023-06-17
  • Java程序运行的机制是什么
    本篇文章为大家展示了Java程序运行的机制是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集...
    99+
    2023-05-31
    java ava
  • JavaScript的运作原理是怎样的
    JavaScript的运作原理是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。让我们从浏览器理解的语言开始。浏览器仅理解...
    99+
    2022-10-19
  • mysql update的机制是怎么样的
    本篇文章为大家展示了mysql update的机制是怎么样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 可以看到,一个Update操...
    99+
    2022-10-18
  • springboot运行模式是怎样的
    本篇内容介绍了“springboot运行模式是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、springboot项目常见的运行方式...
    99+
    2023-06-05
  • java程序是怎样运行的
    程序运行流程:先把Java代码编译成字节码,也就是把“.java”类型的文件编译成“.class”类型的文件。这个过程的大致执行流程:Java源代码 -> 词法分析器 -> 语法分析器 -> 语义分析器 -> 字节码生成器 ->最终生成字...
    99+
    2016-04-20
    java入门 java 程序 运行
  • PHP运行模式是怎样的
    本篇内容主要讲解“PHP运行模式是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP运行模式是怎样的”吧!PHP 运行模式SAPI这里所说的 PHP 运行模式, 其实指的是 SAPI (...
    99+
    2023-06-22
  • Linux运行级别是怎样的
    本篇内容介绍了“Linux运行级别是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!大家都知道 Windows 有安全模式,它是Wind...
    99+
    2023-06-27
  • php的运行机制和原理是什么
    PHP的运行机制和原理如下: 客户端请求:当用户在浏览器中输入一个URL并发送请求时,服务器会接收到该请求。 Web服务器:...
    99+
    2023-10-28
    php
  • Laravel schedule调度的运行机制是什么
    这篇文章主要介绍“Laravel schedule调度的运行机制是什么”,在日常操作中,相信很多人在Laravel schedule调度的运行机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Larav...
    99+
    2023-06-29
  • AJAX中DOM的运行是怎样的
    这篇文章将为大家详细讲解有关AJAX中DOM的运行是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 被AJAX中DOM的...
    99+
    2022-10-19
  • java的运行过程是怎样的
    这篇文章给大家介绍java的运行过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java的运行流程一,我们所看不到的:1,如果java文件没有package,就默认给文件加上"无名"pac...
    99+
    2023-06-03
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作