JS的arguments对象

来源:互联网 发布:大数据开发工程师待遇 编辑:程序博客网 时间:2024/05/01 22:04

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);       }   }