初学js的时候,对arguments这个东西常见,就是搞不清他的意思~ 下面是我找到的一些资料和我的理解,终于弄懂了这个家伙
首先arguments指向实参对象
在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象 arguments[0],arguments.length,类数组不是数组,虽然也有数组的前面这两种属性,具体判断可以使用instanceof来判断一下
instanceof 用于判断一个实例是否是某种类型
在 typeof 方法返回 “object” 的情况下,instanceof 方法还是很有用的。
arrayLike instanceof Array
// false
其值是布尔值那么问题来了
arguments是什么?
1. arguments是收到的实参副本
在词法分析中, 首先按形参形成AO的属性,值为undefined
当实参传来时, 再修改AO的相应属性.
2:并把所有收到实参收集起来,放到一个arguments对象里
function t(a,b,c){},
调用时: t(1,2,3,4,5) 5个参数,这里传入了5个参数
此时 , AO属性只有a,bc,3个属性, 但是arguments里有1,2,3,4,5, 所有的值,这个arguments就用来存储传入的所有参数
对于超出形参个数之外的实参, 可以通过arguments来获得
3. arguments 的索引 从 0, 1,2,....递增,与实参逐个对应
4. arguments.length 属性代表实参的个数
5. arguments一定不是数组, 是长的比较像数组的一个对象,虽然也有length属性
6:arguments每个函数都会有,因此,arguemnts只会在内部找自身的arguments,
无法引用到外层的arguments
1 <script type="text/javascript"> 2 // 求圆形面积,矩形面积, 三角形面积 3 function area () { 4 if(arguments.length == 1) { 5 alert(3.14 * arguments[0] * arguments[0]); 6 } else if(arguments.length == 2) { 7 alert(arguments[0] * arguments[1]); 8 } else if(arguments.length == 3) { 9 alert(arguments[0] + arguments[1] + arguments[2]); 10 } else { 11 return null; 12 } 13 } 14 area(10,20,30); 15 16 </script>
下面是W3C上的一些解释
arguments 对象
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。
因此,无需明确命名参数,就可以重写函数:
function sayHi() {
if (arguments[0] == "bye") {
return;
}
alert(arguments[0]);
}
检测参数个数
还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。
下面的代码将输出每次调用函数使用的参数个数:
1 function howManyArgs() { 2 3 alert(arguments.length); 4 5 } 6 7 8 9 howManyArgs("string", 45); 10 11 howManyArgs(); 12 13 howManyArgs(12);
上面这段代码将依次显示 "2"、"0" 和 "1"。
注释:与其他程序设计语言不同,ECMAScript 不会验证传递给函数的参数个数是否等于函数定义的参数个数。开发者定义的函数都可以接受任意个数的参数(根据 Netscape 的文档,最多可接受 255 个),而不会引发任何错误。任何遗漏的参数都会以 undefined 传递给函数,多余的函数将忽略。