Javascrip中的每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。
1)求给定的若干个值中的最大值
function max(a,b){
return a-b>0 ? a : b;
}
function Max(){
var maxValue = arguments[0];
for(var i=1; i<arguments.length; i++){
if(maxValue < arguments[i]){
maxValue = arguments[i];
}
}
return maxValue;
}
console.log(Max(1,2,0,-10,100,5)); //
我们知道每一个对象都有自己的属性,arguments对象也不例外,首先arguments的访问犹如Array对象一样,用0到arguments.length-1来枚举每一个元素。下面我们来看看callee属性,返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象,这允许匿名的递归函数。
2)利用arguments.callee进行递归
function factorial(n){
if (n <= 0){
return 1;
} else{
return n * arguments.callee(n-1);
}
}
alert(factorial(5)); //
需要注意的是:
1.arguments是一个object对象,它不是数组,不能对它使用shift、push、join等方法。
2.上述举例时用的arguments[i]中的i只是作为arguments对象的属性,并不能理解为数组下标。
3.命名参数只提供便利,不是必须的;如果没有声明,可以用arguments[i]来访问数据。
4.没有传递值的命名参数将自动赋予undefined。