浏览器中js运行机制(js引擎如何处理js的)

在 V8 引擎中 JavaScript 代码的运行过程主要分成三个阶段:

  1. 语法分析阶段(该阶段会对代码进行语法分析,检查到代码语法错误,会在控制台抛出异常并终止执行)
  2. 编译阶段。 执行上下文创建(创建变量对象、建立作用域链、确定 this 的指向)。每个不同的运行环境,V8 引擎都会创建新的执行上下文。
  3. 执行阶段。 将编译阶段中创建的执行上下文压入调用栈,并成为正在运行的执行上下文,代码执行结束后,将其弹出调用栈

创建变量对象(Variable Object,简称 VO)

  1. 每个执行上下文都会有一个关联的变量对象,该对象上会保存这个上下文中定义的所有变量和函数
  2. 在浏览器中,全局环境的变量对象是window对象,因此所有的全局变量和函数都是作为window对象的属性和方法创建的。
  3. 在 Node 中全局环境的变量对象则是global对象
  4. 在 JavaScript 中环境分,词法环境(Lexical Environment)和变量环境(Variable Environment)两种
  5. 变量环境用来记录var/function等变量声明
  6. 词法环境是用来记录let/const/class等变量声明

建立作用域链(Scope Chain)

通过外部词法环境的引用,作用域可以层层拓展,建立起从里到外延伸的一条作用域链。当某个变量无法在自身词法环境记录中找到时,可以根据外部词法环境引用向外层进行寻找,直到最外层的词法环境中外部词法环境引用为null,这便是作用域链的变量查询。

确定 this 的指向

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/formylovetm/article/details/127261125