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權威指南