学透执行上下文变量对象

118 阅读1分钟

1、关系

  • 全局上下文中的变量对象就是全局对象(执行时主要是活动对象起作用)

2、函数上下文两个对象

  • AO 活动对象(activation object, AO)来表示变量对象,可在 JavaScript 环境中访问,只有到当进入一个执行上下文中,这个执行上下文的变量对象才会被激活

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

  • GO 全局对象

3、 执行过程

  • 分析和执行
  • 例子
function foo(a) {
  var b = 3;
  function c() {}
  var d = function() {};
  b = 6;

}

foo(2);
  • 分析过程 (初始状态 var 定义的内容都是undefined)
AO = {
    arguments: {
        0: 1,
        length: 1
    },
    a: 2,
    b: undefined,
    c: reference to function c(){},
    d: undefined
}
  • 执行过程 (顺序执行代码 并且修改对应的值 )
AO = {
    arguments: {
        0: 1,
        length: 1
    },
    a: 2,
    b: 6,
    c: reference to function c(){},
    d: reference to FunctionExpression "d"
}

4、更全面信息请看 github.com/huanhunmao

5、需要注意的两个例子