美文网首页前端种种程序员
JS编译过程,VO,AO

JS编译过程,VO,AO

作者: 摘星_s | 来源:发表于2017-07-31 23:54 被阅读584次

首先关于整个生命周期,最重要的是要了解它的编译过程。

  1. 发现有代码调用了一个函数
  2. 在执行这个function之前,创建一个执行上下文(execution context),也可以叫执行环境。
  3. 进入创建阶段(VO创建)
    a. 初始化作用域链(scope chain)
    b. 创建变量函数(variable object / VO)
    c. 创建参数对象(arguments object,传进来的参数),检查上下文,初始化其名字和值,以及建立引用对象的拷贝。
    d. 扫描上下文中的函数声明
    e. 为每一个扫描到的函数声明在VO中创建一个属性,命名为函数的名字,指向了存储空间中的对应函数。
    f. 如果函数名称已经存在了,这个引用指针将被重写为新的这一个。
    g. 扫描上下文中的变量声明
    h. 为每一个扫描到的变量声明在VO中创建一个属性,命名为变量的名字,初始化值为undefined。
    i. 如果变量名在内存中已经存在了,就跳过。
    j. 决定上下文中this的指向。
  4. 执行阶段(VO => AO)
    a. 执行/解释上下文中的function,为变量赋值
    b. 代码按行执行

就我个人理解,他们的相应概念和包含内容如下。

scope :变量/函数起作用的区域
scope chain : 保证对执行环境有权访问的所有变量和函数的有序访问。相当于VO + [scope]
我们可以将作用域定义为一套规则,用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找,作用域链是这套规则的具体实现。

execution context = {VO, this, [scope]}

this : 函数/方法的拥有者

相关文章

  • JS编译过程,VO,AO

    首先关于整个生命周期,最重要的是要了解它的编译过程。 发现有代码调用了一个函数 在执行这个function之前,创...

  • javascript是怎么执行的?

    这篇文章会集合介绍关于js运行过程中的VO、AO、形参、实参arguments、执行上下文EC、作用域scope、...

  • 2018-09

    dto、do、vo、bo、ao lombok

  • 预编译阶段变量函数的提升 和 多个函数的执行顺序

    下面这道题讲解变量和函数的提升 预编译js的变量对象 AO对象 让js引擎去访问1、创建AO对象2、找形参和变量的...

  • javascript中对this的理解

    //1.函数预编译过程中 this --> window //AO this: window function t...

  • 七 预编译 & 初识作用域

    js执行三部曲 语法分析 // 通篇扫描,但是不编译 预编译 // 四部曲 1.创建AO对象(...

  • 函数预编译AO对象

    函数预编译AO(Activation Object)对象 AO对象加载顺序 1. 创建一个AO对象AO{} 2.将...

  • 2021-08-27

    1、 2、 实际上是因为JS代码在执行之前会有预编译阶段,在预编译函数时会创建AO活动对象(实际就是说明在函数体内...

  • JS编译机制:语法树、AO、GO

    JS运行步骤 JS有两个特性,一个是单线程,一个是解释性语言。不同于编译性语言,解释性语言通常理解为不整体编译,由...

  • JS预编译——AO对象、GO对象

    AO:函数预编译 打印结果 预编译流程1.计算机执行函数前,会创建一个AO对象AO{} 2.将函数内所有的形参和变...

网友评论

    本文标题:JS编译过程,VO,AO

    本文链接:https://www.haomeiwen.com/subject/oxydlxtx.html