今日学习总结(一):javascript 代码在v8中的执行过程

207 阅读2分钟

javascript语言类型

javascirpt 是一门弱类型动态型语言高级语言,同时也是一门解释型语言。

弱类型语言具体表现为变量类型会被自动推导出来;动态型语言具体表现为定义的变量可以被随时更换类型;高级语言具体表现为可以代码可以面向过程面向对象编程;解释型语言具体表现为边解释边执行,可以跨平台。

language-type.png

执行过程

首先javascript代码执行过成分为2个阶段:编译阶段墩、执行阶段。

编译阶段

解释器会根据代码进行词法分析,语法分析,然后转成AST码;然后生成执行上下文;然后把AST码转为字节码。

字节码就是介于 AST 和机器码之间的一种代码。但是与特定类型的机器码无关,字节码需要通过解释器将其转换为机器码后才能执行

执行阶段

如果有一段代码被频繁执行,那么这段代码称为热点代码,会被转为机器码存储到内存中。

名词解释

Ignition 解释器

TurboFan 编译器

JIT 字节码配合解释器和编译器

机器码 机器执行的代码

AST 抽象语法树

词法分析 主要是对代码进行token化

语法分析 对token化的代码进行组装成AST

执行上下文 包括变量环境跟词法环境,是 JavaScript 执行一段代码时的运行环境

变量环境 储存一些函数内部申明的变量

词法环境 存储块级作用域的申明的变量

调用栈 管理执行上下文的栈

作用域 指在程序中定义变量的区域,该位置决定了变量的生命周期,作用域控制着变量和函数的可见性和生命周期

作用域链 由多个作用域组合而成的一条链

词法作用域 指作用域是由代码中函数声明的位置来决定的,所以词法作用域是静态的作用域,通过它就能够预测代码在执行过程中如何查找标识符

闭包 在 JavaScript 中,根据词法作用域的规则,内部函数总是可以访问其外部函数中声明的变量,当通过调用一个外部函数返回一个内部函数后,即使该外部函数已经执行结束了,但是内部函数引用外部函数的变量依然保存在内存中,我们就把这些变量的集合称为闭包

总结

学习了很多名词解释