在代码运行前编译器将代码转化为机器码,运行时候直接使用,不需要再次编译
在运行的时候将代码转化为机器码使用,弱类型语言=>在运行的时候才能确定其类型 目前的 TS 只是增加了编译时候的类型检测
解释性语言的执行速度要慢与编译性语言
执行过程
将字符流转化为 tokens,token 指的是语法上不能分割的最小单位;比如这行代码 var a =1;通常会被分解成 var 、a、=、2、
token 生成 AST
由于直接转化为机器码会带来内存占用太大,而且有写场景更适合转化为字节码,字节码可以理解为机器码的抽象。
在生成字节码的过程中,如果刚发现一段 diamante 多次执行,生成的字节码以及分析会传给 TurBoFun 编译器,他会根据分析的数据生成机器码。主要是通过一种推测优化的技术,生成机器码
执行上下文创建(创建变量对象、作用域链、this)
执行上下文创建
执行上下文的穿件离不开 JS 的运行环境,其运行环境包括全局环境:第一次载入代码,会创建一个全局环境,直到应用程序退出才会销毁。
函数环境: 当函数呗调用的时候,则就会进入该函数的运行环境,当该环境代码全部执行完毕,环境才会被销毁。eval。在不同的运行环境中,JS 都会创建一个新的执行上下文,该过程包括:
- 创建 agrument 对象,检查函数声明(内存中创建函数,并初始化为函数对象)、变量声明(初始化赋值 undefine,执行时候赋值)【变量提升和函数提升就在这个阶段】
- 词法环境-变量环境(let、function)和词法环境(let、const、class)。通过词法环境记录变量函数的声明
将编译阶段的执行上下文压入执行栈,执行上下文结束之后弹出