js中arguments的应用

Javascrip中的每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。
 
1)求给定的若干个值中的最大值
 1     function max(a,b){
 2         return a-b>0 ? a : b;
 3     }
 4     function Max(){
 5         var maxValue = arguments[0];
 6         for(var i=1; i<arguments.length; i++){
 7             if(maxValue < arguments[i]){
 8                 maxValue = arguments[i];
 9             }
10         }
11         return maxValue;
12     }
13     console.log(Max(1,2,0,-10,100,5)); // 100
 
我们知道每一个对象都有自己的属性,arguments对象也不例外,首先arguments的访问犹如Array对象一样,用0到arguments.length-1来枚举每一个元素。下面我们来看看callee属性,返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象,这允许匿名的递归函数。

2)利用arguments.callee进行递归

1     function factorial(n){
2         if (n <= 0){
3             return 1;
4         } else{
5             return n * arguments.callee(n-1);
6         }
7     }
8     alert(factorial(5)); // 120

 

需要注意的是:
1.arguments是一个object对象,它不是数组,不能对它使用shift、push、join等方法。
2.上述举例时用的arguments[i]中的i只是作为arguments对象的属性,并不能理解为数组下标。
 
3.命名参数只提供便利,不是必须的;如果没有声明,可以用arguments[i]来访问数据。
4.没有传递值的命名参数将自动赋予undefined。
posted @ 2017-01-09 16:51  芒果酱-Jessie  阅读(337)  评论(0编辑  收藏  举报