JavaScript函數的參數

關鍵字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];
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章