zoukankan      html  css  js  c++  java
  • js--变量对象总结

      

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

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

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

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

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

      

      执行上下文的代码会分成两个阶段进行处理:分析执行,我们也可以叫做:

    1. 进入执行上下文
    2. 代码执行

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

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

      

      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

  • 相关阅读:
    2020年. NET Core面试题
    java Context namespace element 'component-scan' and its parser class ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher 解决方法
    vue 淡入淡出组件
    java http的get、post、post json参数的方法
    vue 父子组件通讯案例
    Vue 生产环境解决跨域问题
    npm run ERR! code ELIFECYCLE
    Android Studio 生成apk 出现 :error_prone_annotations.jar (com.google.errorprone:error) 错误
    记忆解析者芜青【总集】
    LwIP应用开发笔记之十:LwIP带操作系统基本移植
  • 原文地址:https://www.cnblogs.com/lulin1/p/9364795.html
Copyright © 2011-2022 走看看