语法分析
预编译
解释执行
1.语法分析
语法分析是 JavaScript
引擎处理代码的第一步。
在这个阶段,引擎将源代码字符串分解成一个个的词素(token),这些词素是语言中有意义的最小单元,如关键字
、变量名
、操作符
等。
语法分析器会将其分解为
-
var
(关键字) -
userName
(标识符) -
=
(赋值操作符) -
我是字符串(字符串字面量)
-
;
(语句终结符)
2.预编译
预编译是语法分析之后的一个阶段,这个阶段主要进行作用域链
的建立和变量提升
。
JavaScript
引擎会创建一个作用域链,确保变量和函数的访问遵循正确的作用域规则。
变量提升
是 JavaScript 中一个独特的特性,它指的是变量
和函数声明
会被提升到它们所在作用域的顶部。
例如,即使在代码中后面声明了变量,引擎也会在预编译阶段将它们提升到顶部
,但只有声明部分被提升,初始化部分不会。
预编译阶段还会进行一些静态错误检查
,比如检查变量是否已经声明。
3.解释执行
解释执行是 JavaScript
代码实际运行的阶段。在这个阶段,JavaScript
引擎逐行读取代码,并根据代码的指令执行相应的操作。
解释器会逐个处理词素,将其转换成可执行的机器指令。这个过程可能涉及到变量的查找
、函数的调用
、表达式的计算
等。
JavaScript 的解释执行通常比较慢,因为它需要在运行时动态地解析和执行代码。
为了提高性能,现代浏览器的 JavaScript 引擎通常会使用一些优化技术,如即时编译(JIT)编译器,将热点代码(频繁执行的代码)编译成机器码
以提高执行效率。