關鍵字arguments:
arguments:只在函數內部起作用,並且永遠指向當前函數的調用者傳入的所有參數,arguments類似於數組,但是不是數組。
例子:
//輸出所有傳入的參數
function foo(x){
console.log(x);
for (var i=0;i<arguments.length;i++){
console.log(arguments[i]);
}
}
foo(10,20,30);//10,20,30
//可以用來判斷傳入參數的個數,來進行函數的設計
//例如:需要接收2-3個參數,其中b爲可選參數,如果只傳兩個參數的話,
//b就默認爲null
function foo1(a,b,c){
if(arguments.length===2){
c=b;//如果只傳了兩個參數,就將傳入的第二個參數b賦值給c
b=null;//然後將第二個參數b設置爲null
}
}
關鍵字rest:
rest:es6中的新參數,rest參數可以將多餘的參數以數組形式交給變量rest,所以不再需要arguments我們就可以獲取全部參數,如果參數傳入過少,沒有填滿基本參數,那麼rest就會接受一個空數組
例如:
//定義一個球傳入所有參數和的函數。
function sum(...rest){
var sum=0;
for(var i of rest){
sum=sum+i;
}
return sum;
}
console.log('和爲'+sum(2,2,99,99,99,99));
現在出題:
定義一個計算圓的面積的函數,傳入兩個參數,π和r,如果沒傳入π,則默認爲3.14
1.用arguments實現
function area(r,pi){
if(arguments.length === 1){
pi = 3.14;
return r*r*pi;
}else{
return r*r*pi;
}
}
2.arguments簡化版
function area(r,pi){
return arguments.length===1 ? r*r*3.14:r*r*pi;
}
3.rest實現
function area(r,...rest){
if(rest.length === 0){//當rest長度爲0說明沒有傳入值,所以爲空數組
return r*r*3.14;
}else{
return r*r*rest[0];
}
}