活动对象

121 阅读1分钟

函数执行上下文与活动对象(activation object)

与全局上下文不同,函数执行上下文是不能直接访问变量对象(variable object)的, 会用活动对象来代替变量对象。

活动对象是在刚进入函数执行上下文被创建的,是通过函数的arguments属性作为key,Arguments对象作为对应值进行初始化的。

activation object = {
                arguments:Arguments
}

Arguments有以下三个属性:

  1. properties-indexes属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是共享的,但是未传值的参数和这个索引是不共享的。
  2. callee — 指向当前函数的引用
  3. length — 真正传递的参数个数
        function a(x, y) {
            console.info(arguments)
            y = 33
            console.info('arguments[1]:', arguments['1'])
        }
        a(12)

这是上面的函数在浏览器执行的结果,可以看到,在函数执行时并没有给y参数传值,所以arguments[1]与y参数是不共享的。 image.png