调用对象定义了一个特殊的属性,名称arguments,它实际上引用了一个特殊对象arguments对象,因为arguments属性是调用对象的一个属性,因此它的状态和局部变量以及形参是相同的。arguments.length可以获取传递给参数的实参数量
废话不多少,例子说明一切
运行结果:
Java代码
f(1,2,3) function f called with2arguments,but it expects3arguments
arguments的行为有点想数组,但它其实并不是数组,它不具备JavaScript核心数组的一些方法如join、sort、slice等
一个使用arguments对象那个接收任意参数的例子
Java代码
一个使用arguments对象模拟函数重载的例子
Java代码
New Document
需要注意的是:在使用了命名参数的函数中,arguments中的参数也始终是相应命名参数的别名,不管这个参数是值类型还是引用类型,改变arguments中的参与一定会影响到对应的命名参数,反之亦然如:
Java代码
function f(x)
{
alert(x);//参数初始值
arguments[0]++;//改变参数的值
alert(x);//x的值发生了改变
}Arguments对象还提供了一个有用的属性叫做callee,它被用来应用当前正在执行的函数,它提供了一种匿名的递归调用能力,这对于闭包说非常有用,如:
用闭包计算10的阶乘
Java代码
function(x){
return x>1?x*arguments.callee(x-1):1
}(10);










