arguments 对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。索引 n 实际上是 arguments 对象的 0…n 属性的其中一个参数。
在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]); } } |
arguments的length属性
含义
返回调用程序传递给函数的实际参数数目。
用法
[function.]arguments.length
其中可选项 function 参数是当前正在执行的 Function 对象的名称。
说明
当 Function 对象开始执行时,脚本引擎将 arguments 对象的 length 属性初始化为传递给该函数的实际参数数目。
js不会主动为你判断你到底给函数传了多少个参数,如果你多传了,多余的部分就没有被使用,如果你少传了,那么没传的参数值就是undefined
所以我们可以借助arguments的length属性来检测调用函数时是否使用了正确数目的实际参数,因为javascript是不会为你做这些事的
arguments 的 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 属性的用法
下面的例子演示了 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的callee属性
含义
表示对函数对象本身的引用,也就是所指定的 Function 对象的正文,这有利于实现无名函数的递归或者保证函数的封装性。
用法
[function.]arguments.callee
可选项 function 参数是当前正在执行的 Function 对象的名称。
说明
callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。
callee 属性的初始值就是正被执行的 Function 对象。这允许匿名的递归函数。
实例:
用递归来计算1到n的自然数之和:
代码如下 | 复制代码 |
<script> var sum=function(n){ if(1==n) { return 1; } else { return n + arguments.callee(n-1); } } alert(sum(100)); </script> |
补充
代码如下 | 复制代码 |
<pre><script type="text/javascript"> //JS Arguments对象暂存函数参数与属性 //在JavaScript中,当一个函数被调用时,JS会为这个函数建立一个Arguments对象,局部变量arguments自动初始化以便引用这个对象。 //JS Arguments对象最主要的功能是:提供一种方法,用来确定传递给函数的参数个数并且引用未命名的参数。 //JS Arguments对象只在函数体中定义,JS Arguments对象被定义成数组的形式,可用arguments[i]引用函数的参数,arguments[0]是函数第1实参,arguments.length = 参数个数,但JS Arguments对象不是数组。 //JS Arguments对象属性: //(1)arguments.callee = 正在执行的函数的引用 //(2)arguments.length = 参数个数 //应用实例: var fac = function(x){ document.writeln("fac(1) = " + fac(1));// fac(1) = 1 |