今天我們來看看arguments對象及屬性。arguments對象不能顯式創建,arguments對象只有函數開始時才可用。函數的 arguments 對象並不是一個數組,訪問單個參數的方式與訪問數組元素的方式相同。索引 n 實際上是arguments 對象的 0…n 屬性的其中一個參數。
1 function add(a,b){ 2 console.log(typeof arguments); 3 for(var attr in arguments){ 4 console.log(attr+":"+arguments[attr]); 5 } 6 return a+b; 7 } 8 9 add(10,20)
通過輸出結果看到,arguments其實是一個對象,而不是一個數組,而這個數組有2個屬性,屬性名為0和1,其值分別為10和20
在JavaScript中,參數列表分為形參和實參。形參即為定義函數時指定的參數,實參為調用函數時指定的參數。例如在上面例子中可以通過
alert(add(10))
來調用函數,這里只指定了一個參數,即實參個數為1,形參個數為2。在JavaScript中,並沒有要求實參個數必須和形參個數相同。上面的代碼同樣可以執行。只是輸出NaN
在實際中,我們可以這樣,先判斷參數個數
1 function add(a,b){ 2 3 //add.length也可以獲取形參個數,但實際中用arguments.callee.length 4 if(arguments.length==arguments.callee.length){ 5 return a+b; 6 }else{ 7 return "參數錯誤"; 8 } 9 10 }
arguments.length:獲取實參個數
arguments.callee.length:獲取形參個數
arguments.callee:指帶函數本身
arguments常用於遞歸操作
例如,求一個1到n的和
1 function fn(n){ 2 3 if(n==1){ 4 return 1; 5 }else{ 6 return n+arguments.callee(n-1); 7 } 8 } 9 10 alert(fn(100))
結果為5050