JS运行原理

258 阅读2分钟

JS运行原理

计算机工作过程 WechatIMG470.png 机器语言、汇编语言、正则语言、解释程序、编译、汇编

  • 计算机中可直接执行的语言:机器语言
  • 用助记符编写的语言:汇编语言
  • 正则语言:编译原理中符合正则文的语言
  • 解释程序的特点:翻译一句执行一句,边编译边执行
  • 编译:高级语言->汇编语言
  • 汇编:汇编语言->机器语言
  • 执行过程:高级语言->汇编语言->机器语言 WechatIMG472.png

WechatIMG471.png

V8引擎行原理

主要能力是将JavaScript源码解释编译,并运行。现阶段的工作机制可以分为以下几个阶段:

  • Parser:解析器,将JS源码解析为AST(抽象语法树,Abstract Syntax Tree);
  • Ignition:基于寄存器的解释器,用于将AST转换为字节码;
  • TurboFan:基于Ignition生成的字节码,生成对应平台的机器码,并对其进行优化和反优化。

代码执行的整个过程说起来就像一条生产流水线。第一道工序是在预编译阶段创建变量对象(Variable Object),此时只是创建,而未赋值。到了下一道工序代码执行阶段,变量对象转为激活对象(Active Object),即完成 VO → AO。此时,作用域链也将被确定,它由当前执行环境的变量对象和所有外层已经完成的激活对象组成。这道工序保证了变量和函数的有序访问,即如果当前作用域中未找到变量,则继续向上查找直到全局作用域。

这样的工序在流水线上串成一个整体,这便是 JavaScript 引擎执行机制的最基本道理。 经过预编译过程,我们应该注意三点:

  • 预编译阶段进行变量声明;
  • 预编译阶段变量声明进行提升,但是值为 undefined;
  • 预编译阶段所有非表达式的函数声明进行提升。