1、arguments[]数组只在函数体内定义。在函数体内,arguments引用该函数的Arguments对象,该对象有带有编号的属性,并作为一个存放传递给函数的所有参数的数组。标识符arguments本质是一个局部变量,在每个函数中都会被自动声明并被初始化。它只在函数体中才能引用Arguments对象,在全局代码中没有定义。
function arg(a,b){ if(arguments[0]){ alert(arguments[0]); } if(arguments[1]){ alert(arguments[1]); }}
2、Arguments对象只在函数体中定义。虽然技术上说,它不是数组,但Arguments对象有带编号的属性,这些属性可以作为数组元素,而且他有length属性,该属性声明了数组元素的个数。它的元素是作为参数传递给函数的值。元素0是第一个参数,所有作为参数传递的值都会成为Arguments对象的数组元素,无论函数声明中是否有这些参数。
3、arguments.callee属性引用当前正在运行的函数(无论函数是否命名,都可以使函数引用自身)。该属性只有在函数体内被定义。
var fac=function(a){ if(a<2) return 1; else return a*arguments.callee(a-1);}var y=fac(5);
4、arguments.length属性 传递给当前函数的个数。这个属性声明的是实际传递给函数的参数个数
function check(args){ var actual=args.length; var expected=args.callee.length; if(actual != expected){ throw new Error("Wrong number of arguments:extected: "+expected +"; actually passed: "+actual); }}function f(x,y,z){ check(arguments); return x+y+z;}
参照:JavaScript权威指南