浅谈JS的arguments对象---借鉴

  在JavaScript中,arguments属于当前对象的一个内置属性,arguments非常类似于Array对象,但是又不是实例的Array。比如:

1 Array.prototype.testArg = "test";
2 function funcArg() {
3      alert(funcArg.arguments.testArg); 
4      alert(funcArg.arguments[0]);
5 } 
6 alert(new Array().testArg); // result: "test"
7 funcArg(10);    // result: "undefined"  "10"
8 
9 // 将testArg作为属性写在Array的原型链上

 arguments对象的长度是由实参个数决定的,形参是函数内部重新开辟内存空间储存的变量,与arguments对象内存空间不重叠。对于arguments和值都存在的情况下,两者值都是同步的,但是针对一个无值得情况下,无值是不会得以同步的,如例:

 1 function f(a, b, c){
 2     alert(arguments.length);   // result: "2"
 3     a = 100;
 4     alert(arguments[0]);       // result: "100"
 5     arguments[0] = "qqyumidi";
 6     alert(a);                  // result: "qqyumidi"
 7     alert(c);                  // result: "undefined"
 8     c = 2012;
 9     alert(arguments[2]);       // result: "undefined"
10 } 
11 f(1, 2);
12 
13 // 实参的个数影响着结果,若一开始没有实参,后来再重新赋值依然是undefined(理解)

 arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。

 1 function count(a){
 2     if(a<1){
 3         return 0;
 4     }
 5     return a + arguments.callee(a-1);
 6 }
 7  
 8 var num = count(4);
 9 alert(num);    // 10     ==>4+3+2+1 有加减的关系是因为return a+...,如果只是return arguments.calle();则只返回最后一个,这里的最后一个是 0 (if中的结果)
10 
11 // arguments.callee(); 理解为递归函数,递归条件为方法体内的if语句,判断条件为calle()的参数(理解),**但是返回的是最后一个结果(这句话理解)**

  差不多常用的就这些吧。如有疑问或见解,多多指正。

  差不多常用的就这些吧。如有疑问或见解,多多指正。

猜你喜欢

转载自www.cnblogs.com/wevvv/p/10341381.html