在js中一切都是對象,連函數也是對象,函數名實際上是引用函數定義對象的變量。數組
一、什麼是arguments?函數
這個函數體內的arguments很是特殊,其實是所在函數的一個內置類數組對象,能夠用數組的[i]和.length。spa
二、有什麼做用?code
js語法不支持重載!但可用arguments對象模擬重載效果。對象
arguments對象:函數對象內,自動建立的專門接收全部參數值得類數組對象。
arguments[i]: 得到傳入的下標爲i的參數值
arguments.length: 得到傳入的參數個數!blog
重載:io
程序中可定義多個相同函數名,不一樣參數列表的函數,
調用者沒必要區分每一個函數的參數,
執行時,程序根據傳入的參數個數,自動判斷選擇哪一個函數執行。console
例子以下:function
// 一、若是用戶傳入一個參數,求平方 function sum(a){ console.log(a*a); } //若是用戶傳入兩個參數,就求和 function sum(a,b){ console.log(a+b); } sum(4); //? sum(4,5); //?
上述例子中本意是想讓同名函數sum()根據參數不一樣輸出不一樣結果,可是sum是函數名字,本質也是個變量,class
第二個會覆蓋第一個,因此上述的正確輸出答案是:NaN,9.因此這樣顯然不能夠。
若是用arguments,就簡單多了。
以下2個例子:
//二、 function calc(){ //若是用戶傳入一個參數,求平方 if(arguments.length==1){ console.log(arguments[0]*arguments[0]); }else if(arguments.length==2){ //若是用戶傳入兩個參數,就求和 console.log(arguments[0]+arguments[1]); } } calc(4); //16 calc(4,5); //9
/*三、不管用戶傳入幾個數字,均可以求和*/ function add(){ //arguments:[] //遍歷arguments中每一個元素,並累加 for(var i=0,sum=0;i<arguments.length;sum+=arguments[i++]); return sum;//返回和 } console.log(add(1,2,3)); //6 console.log(add(1,2,3,4,5,6)); //21
這就是JS利用arguments重載的效果,簡單理解就是一個函數重複利用.
arguments.length是有實參決定,即函數調用時候裏面的參數個數決定!