函数的实际参数:Arguments对象

函数的实际参数:Arguments对象
尽管定义javascript函数时有固定数目的命名参数,但当调用这个函数时,传递给它的参数数目却可以是任意的。数组arguments[]允许完全地存取那些实际参数值,即使某些参数还没有被命名。假定你定义了一个函数f,要传递给它一个实际参数x.如果你用两个实际参数来调用这个函数,那么在函数体内,用形式参数名x或arguments[0]可以存取第一个实际参数。而第二个实际参数只能通过arguments[1]来存取。且其具有length属性,用于说明它所含有的元素个数。
数组arguments[]可以用于多个方面。下面的例子说明了如何使用它来检测调用函数时是否使用了正确数目的实际参数,因为javascript不会替你做这项检测:
<script>

function f(x,y,z)
{
     //首先检查传递的参数数量是否正确
     if(arguments.length!=3){
           throw new Error("function f called with"+arguments.length+"arguments,but it expects 3 arguments");
     }
     //下面运行真正的函数
     alert("bb");
}
</script>
<body onload = "f(1,2,32,3)"></body>


数组arguments[]还为javascript函数开发了一项重要的可能性,即要以编写函数使之能够使用任意数目的实际参数。下面的例子说明了如何编写一个简单的max()函数,让它能够接受任意数目的实际参数,然后返回其中最大的参数的值
<script>

function max()
{
     var m=Number.NEGATIVE_INFINITY;
     //遍历所有参数,检索并保存其中最大的参数
     for( var i=0;i<arguments.length;i++){
           if(arguments>m) m=arguments;            
     }
     //返回最大的参数
     return m;
}
var largest=max(1,10,100,2,3,4,5,1000,6)
</script>

除了数组元素,Arguments对象还定义了callee属性,用来引用当前正在执行的函数。这对未命名的函数调用自身非常有用。下面是一个未命名的函数直接量,用于计算阶乘
<script>
function(x)
{      if(x<==1) return 1;
     return x*arguments.callee(x-1);
}
var largest=max(1,10,100,2,3,4,5,1000,6)
</script>
posted @ 2007-06-01 10:25  海底的鱼  阅读(278)  评论(0)    收藏  举报