js-变量对象总结

  

  当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。

    对于每个执行上下文,都有三个重要属性: 

    •   变量对象(Variable object,VO)
    •   作用域链(Scope chain)
    •   this

  变量对象:变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的变量和函数声明。  

  在函数上下文中,我们用活动对象(activation object, AO)来表示变量对象。

  活动对象和变量对象其实是一个东西,只是变量对象是规范上的或者说是引擎实现上的,不可在 JavaScript 环境中访问,只有到当进入一个执行上下文中,这个执行上下文的变量对象才会被激活,所以才叫 activation object 呐,而只有被激活的变量对象,也就是活动对象上的各种属性才能被访问。

  活动对象是在进入函数上下文时刻被创建的,它通过函数的 arguments 属性初始化。arguments 属性值是 Arguments 对象。

扫描二维码关注公众号,回复: 2362146 查看本文章

  

  1、VO 和 AO 到底是什么关系。

    未进入执行阶段之前,变量对象(VO)中的属性都不能访问!但是进入执行阶段之后,变量对象(VO)转变为了活动对象(AO),里面的属性都能被访问了,然后开始进行执行阶段的操作。

    它们其实都是同一个对象,只是处于执行上下文的不同生命周期。

  2、一个执行上下文的生命周期可以分为两个阶段。

  (1)创建阶段

在这个阶段中,执行上下文会分别创建变量对象,建立作用域链,以及确定this的指向。

  (2)代码执行阶段

创建完成之后,就会开始执行代码,这个时候,会完成变量赋值,函数引用,以及执行其他代码。

  

 

  3、进入执行上下文时,初始化的规则如下,从上到下就是一种顺序:

  default

  4、AO 实际上是包含了 VO 的。因为除了 VO 之外,AO 还包含函数的 parameters,以及 arguments 这个特殊对象。也就是说 AO 的确是在进入到执行阶段的时候被激活,但是激活的除了 VO 之外,还包括函数执行时传入的参数和 arguments 这个特殊对象。
  AO = VO + function parameters + arguments

猜你喜欢

转载自www.cnblogs.com/lulin1/p/9364795.html
今日推荐