arguments是JavaScript里的一个内置对象,是指向实参对象的引用,它很古怪,也经常被人所忽视,但实际上是很重要的。所有主要的js函数库都利用了arguments对象,所以agruments对象对于javascript程序员来说是必需熟悉的。
JS本身并没有重载函数的功能,但Arguments对象能够模拟重载,JS中每个函数都会有一个Arguments对象实例arguments,arguments是收到的实参副本,在词法分析中, 首先按形参形成AO的属性,值为undefined,当实参传来时, 再修改AO的相应属性,可以用数组下标的方式"[]"引用arguments的元素,arguments.length为函数实参个数,arguments.callee引用函数自身;arguments不是一个数组,如果用typeof arguments,返回的是’object’。虽然我们可以用调用数据的方法来调用arguments。比如length,还有index方法。但是数组的push和pop对象是不适用的。
arguments的特性和使用方法
1.特性:arguments对象和Function是分不开的,因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。
2.使用方法:虽然函数的arguments对象并不是一个数组,但其访问单个参数的方式与访问数组元素的方式相同,索引n实际上是arguments对象的0…n 属性的其中一个参数;虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同;例如:arguments[0],arguments[1],。。。。。。。。arguments[n];在js中不需要明确指出参数名就能访问它们,例如:
function test(){
var s;
for(int i=0;i<arguments.length;i++)
{s+=arguments[i]+",";}
return s;
}
test("name","age")
输出结果:
name,age
我们知道每一个对象都有自己的属性,arguments对象也不例外,首先arguments的访问犹如Array对象一样,用0到arguments.length-1来枚举每一个元素;下面我们来看看callee属性,返回正被执行的Function对象,也就是所指定的Function对象的正文;callee属性是arguments对象的一个成员,仅当相关函数正在执行时才可用。callee属性的初始值就是正被执行的Function对象,这允许匿名的递归函数。
var sum=function(n){
if(1==n) {
return 1;
} else {
return n + arguments.callee(n-1);
}
}
alert(sum(6));
通俗讲就是,arguments对象大多用来针对同个方法多处调用并且传递参数个数不一样时进行使用。根据arguments的索引来判断执行的方法。
arguments的用法和特性基本就是这么多了;可能callee属性用到的比较少,但是如果自己封装或者写一些js的时候,除了callee的东西基本都会用到。