0

0

JavaScript运行原理的详细介绍

不言

不言

发布时间:2019-01-15 11:26:10

|

2833人浏览过

|

来源于segmentfault

转载

本篇文章给大家带来的内容是关于javascript运行原理的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

JavaScript运行原理

知其然,也要知其所以然,这里主要谈一谈对JavaScript运行原理的理解。

JAVA虚拟机

首先我们从JAVA虚拟机说起。

立即学习Java免费学习笔记(深入)”;

首先说一下为什么要做成虚拟机,因为机器不同,如果没有虚拟机我们就相当于需要针对每一种机器都要进行代码编译,这样肯定是不合理的。所以为了解决这样的问题,Java引入虚拟机(VM)的概念,让编译后的代码直接跑在一台虚拟的机器上,无论最终的目标平台是什么,都在上面构建出一个虚拟的一致的虚拟机出来,就可以达到一次编译到处执行的效果了。

而从根本上来说Java和C#不是Native语言,编译的结果不是机器指令,而是某种自有的指令格式,自己运行不了,需要专门的程序去解释执行,这个程序就是我们所说的“虚拟机”。

反之,C、C++、Go、Rust这种语言是Native语言,编译出来的结果是机器指令,可以自己直接运行,不存在“虚拟机”的概念。

JavaScript引擎

而JavaScript引擎所做的工作和JAVA虚拟机很相似

做了什么

JS引擎主要是对JS代码进行词法、语法等分析,通过编译器将代码编译成可执行的机器码让计算机去执行。

简单来说它的唯一的目的就是读取和编译JavaScript代码,也就是说可以分析、解释、优化、垃圾回收javascript代码。

执行过程

动力先锋仿阿里巴巴B2B电子商务系统
动力先锋仿阿里巴巴B2B电子商务系统

前台功能介绍:1、网页首页显示有高级会员推荐,精品推荐,商业机会分类列表,最新供求信息,网站动态,推荐企业,行业动态等;2、商业机会栏目功能有:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,并可以推荐公司,栏目分为分类显示信息,最新的采购、供应、合作和代理信息,搜索时同样按分类,信息,时间,交易类型等搜索;3、展厅展品栏目功能:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,

下载

JavaScript引擎会加载源代码,把它分解成字符串(又叫做分词),再把这些字符串转换成编译器可以理解的字节码,然后执行这些字节码。

Google的V8引擎是用C++ 编写的,它也能够编译并执行JavaScript源代码、处理内存分配和垃圾回收。它被设计成由两个编译器组成,可以把源码直接编译成机器码,具体的执行过程可以看成以下几步:

  1. 它进行词法分析,就是将源代码分解成一系列具有明确含义的符号或字符串。

  2. 然后用语法分析器分析这些符号,将其构建成语法树。

  3. 接着四个 JIT(Just-In-Time)进程开始参与进来,分析和执行解析器所生成的字节码。

与ECMAScript的关系

准确地讲,每个JavaScript引擎都实现了一个版本的ECMAScript,JavaScript是它的一个分支。随着ECMAScript的不断发展,JavaScript引擎也不断改进。之所以有这么多不同的引擎,是因为它们每个都被设计运行在不同的web浏览器、headless浏览器、或者像Node.js那样的运行时环境中。

JavaScript引擎是一段程序,我们写的JavaScript代码也是程序,如何让程序去读懂程序呢?这就需要定义规则。比如:

var a = 1 + 1

左边var代表了这是申明(declaration),它申明了a这个变量
右边的+表示要将1和1做加法
中间的等号表示了这是个赋值语句
最后的分号表示这句语句结束了
上述这些就是规则,有了它就等于有了衡量的标准,JavaScript引擎就可以根据这个标准去解析JavaScript代码了。那么这里的ECMAScript就是定义了这些规则。其中ECMAScript 62这份文档,就是对JavaScript这门语言定义了一整套完整的标准。其中包括:

var,if,else,break,continue等是JavaScript的关键词
abstract,int,long等是JavaScript保留词
怎么样算是数字、怎么样算是字符串等等
定义了操作符(+,-,>,定义了JavaScript的语法
定义了对表达式,语句等标准的处理算法,比如遇到==该如何处理
标准的JavaScript引擎就会根据这套文档去实现,注意这里强调了标准,因为也有不按照标准来实现的,比如IE的JS引擎。这也是为什么JavaScript会有兼容性的问题。至于为什么IE的JS引擎不按照标准来实现,就要说到浏览器大战了,这里就不赘述了,自行Google之。

所以,简单的说,ECMAScript定义了语言的标准,JavaScript引擎根据它来实现,这就是两者的关系。

RunTime

运行时可以简单理解为当前的运行环境,不同的环境提供了不同的api调用,如web浏览器中的window对象,DOM相关API等,这些接口可以提供相关的JS调用

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

843

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

742

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

740

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

400

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号