Arguments
2012-04-12 18:10 呦菜 阅读(368) 评论(0) 编辑 收藏 举报Arguments对象
属性:
callee 对当前正在执行的函数的引用
length 传递给函数的参数个数,同时也是Arguments对象中的数组元素个数
Arguments对象是一个类似数组的对象,注意是类似数组哦,从技术上来讲它不是数组,但是具有带编号的属性,这些属性可以作为数组元素,而且它有length属性。当一个函数被调用时,会为该函数创建一个Arguments对象。
arguments[]数组只在函数体内定义。在函数体内,arguments应用该函数的Arguments对象。
Arguments对象容许完全的存取那些实际参数值,即使某些参数还没有被命名。什么意思呢?看下面的代码就知道了
function foo(a,b,c,d) { alert(arguments.length); //5 alert(arguments[4]); //tt } foo(1,1,1,"s","tt");
当函数具有命名了的参数时,Arguments对象的数组元素是存放函数参数的局部变量的同义词。Arguments对象和参数名提供了同一个变量的两种不同的方法。用参数名改变参数值,会改变通过arguments[]数组获得的值,通过arguments[]数组改变参数的值同样会改变用参数名获得的参数值。
看下面代码:
function foo(a,b,c,d) { arguments[3] = "sss"; alert(arguments[3]); //sss alert(d); //sss d = "m"; alert(arguments[3]); //m } foo(1,1,1,"s","tt");
使用Argument对象可以编写函数使之能够使用任意数目的实际参数,以简单的max()函数作为例子,返回最大的参数值:
function max() { var m = Number.NEGATIVE_INFINITY; for(var i= 0; i < arguments.length; i++) { if(arguments[i] > m) { m = arguments[i]; } } return m; } var largest = max(1,2000,3,100,9); alert(largest); //2000
callee属性用来应用当前正在执行的函数,它可以用来允许对未命名的函数递归的调用自身。如下:
function factorial(x) { if(x<2) return 1; else return x*arguments.callee(x-1); } var y = factorial(5); alert(y); // 120