函数执行上下文与活动对象(activation object)
与全局上下文不同,函数执行上下文是不能直接访问变量对象(variable object)的, 会用活动对象来代替变量对象。
活动对象是在刚进入函数执行上下文被创建的,是通过函数的arguments属性作为key,Arguments对象作为对应值进行初始化的。
activation object = {
arguments:Arguments
}
Arguments有以下三个属性:
- properties-indexes属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是共享的,但是未传值的参数和这个索引是不共享的。
- callee — 指向当前函数的引用
- length — 真正传递的参数个数
function a(x, y) {
console.info(arguments)
y = 33
console.info('arguments[1]:', arguments['1'])
}
a(12)
这是上面的函数在浏览器执行的结果,可以看到,在函数执行时并没有给y参数传值,所以arguments[1]与y参数是不共享的。