js进行函数调用时,除了指定的参数外,还创建一个隐含的对象——arguments。

一、arguments可以用arguments[index]这样的语法取值,拥有长度属性length。arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,例如:

<script>
function func(a,b){
  alert(a);
  alert(b);
  for(var i=0;i<arguments.length;i++){
alert(arguments[i]);
  }
}
 func(1,2,3,4);
</script>



代码运行时会依次显示:1,2,1,2,3,4。函数定义了两个参数,但是在调用的时候传递了4个参数。


二、arguments的callee属性

它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性。例如:用递归来计算1到n的自然数之和:

<script>
var sum=function(n){
  if(1==n) {
return 1;
  } else {
return n + arguments.callee(n-1);
}
  }
  alert(sum(100));
</script>




在javascript中,不需要明确指出参数名,就能访问它们。如:




function hi(){
if(arguments[0]=="andy"){
return;
}
alert(arguments[0]);
}





用arguments[0]可以访问第一个参数,如此类推。




利用arguments对象可以实现重载,利用arguments.length可以获取函数的参数个数,如下:




function hi(){
if(arguments.length==1){
alert(arguments[0]);
}
else if(arguments.length==2){
alert(arguments[0] + arguments[1]);
}
}



length 属性 (arguments)


返回调用程序传递给函数的实际参数数目。




[function.]arguments.length




可选项 function 参数是当前正在执行的 Function 对象的名称。




说明


当 Function 对象开始执行时,脚本引擎将 arguments 对象的 length 属性初始化为传递给该函数的实际参数数目。




示例


下面的例子演示了 arguments 对象的 length 属性的用法。要完全理解示例,请向该函数传递更多的参数:


function ArgTest(a, b){
var i, s = "The ArgTest function expected ";
var numargs = arguments.length;
var expargs = ArgTest.length;
if (expargs < 2)
s += expargs + " argument. ";
else
s += expargs + " arguments. ";
if (numargs < 2)
s += numargs + " was passed.";
else
s += numargs + " were passed.";
return(s);
}




arguments 属性为当前执行的 function 对象返回一个arguments 对象。function.argumentsfunction 参数是当前执行函数的名称,可以省略。说明通过 arguments 属性,函数可以处理可变数量的参数。 arguments 对象的 length 属性包含了传递给函数的参数的数目。对于arguments 对象所包含的单个参数,其访问方法与数组中所包含的参数的访问方法相同。示例下面的例子说明了 arguments 属性的用法:


function ArgTest(){
var i, s, numargs = arguments.length;
s = numargs;
if (numargs < 2)
s += " argument was passed to ArgTest. It was ";
else
s += " arguments were passed to ArgTest. They were " ;
for (i = 0; i < numargs; i++)
{
s += arguments[i] + " ";
}
return(s);
}



0...n 属性返回一个 arguments 对象中的各个参数的实际值,相应的值是由一个正在执行的函数的 arguments 属性返回的。[function.]arguments[[0|1|2|...|n]]参数function可选项。当前正在执行的 Function 对象的名称。0, 1, 2, …, n必选项。0 到 n 范围内的非负整数,其中 0 代表第一个参数而 n 代表最后一个参数。最后参数 n 的值为 arguments.length-1。说明0 . . . n 属性所返回的值就是传递给正在执行的函数的实际值。尽管实际上并不是一个参数数组,您还是可以按照与访问数组元素的方法相同的方式访问组成 arguments 对象的各个参数。示例下面的例子演示了 arguments 对象的 0 . . . n 属性的用法。要完全理解以下例子,请向该函数传递一个或多个参数:


function ArgTest(){
var s = "";
s += "The individual arguments are: "
for (n=0; n< arguments.length; n++){
s += ArgTest.arguments[n];
s += " ";
}
return(s);
}
print(ArgTest(1, 2, "hello", new Date()));



 


callee 属性返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。[function.]arguments.callee可选项 function 参数是当前正在执行的 Function 对象的名称。说明callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象。这允许匿名的递归函数。示例


function factorial(n){
if (n <= 0)
return 1;
else
return n * arguments.callee(n - 1)
}
print(factorial(3));


.



arguments用来获取参数数量和值 


 


function Button1_onclick(a,b,c,d)
{
alert(arguments.length)//实际传入的数量
alert(arguments.callee.length);//本身函数的数量
alert(arguments[1])//实际传入的第2个值 值从0开始
}




   callee:


   返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。






   alert(arguments.callee); 可以打印函数本身




   alert(arguments.callee.length);//本身函数的数量






   举个例子



function JSDemo(arg1, arg2)


{
if (arguments.length==arguments.callee.length)


{
window.alert("验证形参和实参长度正确!");
return;
}


else


{
alert("实参长度:" +arguments.length);
alert("形参长度: " +arguments.callee.length);
}
}