您现在的位置:首页 >> 前端 >> 内容

执行上下文之关于活动对象及Arguments对象知识讲解

时间:2018/6/26 14:26:36 点击:

  核心提示:1.活动对象在函数执行上下文中,VO是不能直接访问的,此时由活动对象(activation object,缩写为AO)扮演VO的角色。VO(functionContext) === AO;活动对象是在...

1.活动对象

在函数执行上下文中,VO是不能直接访问的,此时由活动对象(activation object,缩写为AO)扮演VO的角色。

VO(functionContext) === AO;

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

Arguments对象:

AO = {

  arguments: <ArgO>

};

2.Arguments对象

Arguments对象是活动对象的一个属性,它包括如下属性:

callee — 指向当前函数的引用

length — 真正传递的参数个数

properties-indexes (字符串类型的整数) 属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是共享的。

例如:

function foo(x, y, z) {

  // 声明的函数参数数量arguments (x, y, z)

  alert(foo.length); // 3

  // 真正传进来的参数个数(only x, y)

  alert(arguments.length); // 2

  // 参数的callee是函数自身

  alert(arguments.callee === foo); // true

  // 参数共享

  alert(x === arguments[0]); // true

  alert(x); // 10

  arguments[0] = 20;

  alert(x); // 20

  x = 30;

  alert(arguments[0]); // 30

  // 不过,没有传进来的参数z,和参数的第3个索引值是不共享的

  z = 40;

  alert(arguments[2]); // undefined

  arguments[2] = 50;

  alert(z); // 40

}

foo(10, 20);

作者:网络 来源:yangyuqing