js基礎2-函數

函數就是包裹在花括號中的代碼塊,前面使用了關鍵詞 function。

一、定義函數

function myFunction(x){
    if(x>=0){
        return x;
    } else {
        return -x;
    }
}

上述myFunction()函數的定義如下:

1.function關鍵字指明這是一個函數;

2.myFunction是函數名;

3.x是參數;

4.花括號裏面的代碼是函數體,可以包括若干語句,甚至可以沒有語句。

注意:

函數體的代碼在執行的時候,一旦遇到return時就會執行完畢立即返回,其後的語句並不會執行。如果沒有return語句,就會返回undefined。

由於javascript的函數也是一個對象,上述的函數也可這樣定義 

var myFunction = function(x){
    if(x>=0){
        return x;
    } else {
        return -x;
    }
};

該函數沒有函數名,所以屬於一個匿名函數;但是該函數賦值給了變量myFunction,因此可以通過myFunction調用。

注意第二種方式按照完整語法需要在函數體末尾加一個;,表示賦值語句結束。

二、調用函數

myFunction(9);//返回9

由於javascript允許傳入任意個參數而不影響調用,因此可以傳入多個(更少)的參數都沒問題。

myFunction(9,'balalal');//返回9

myFunction();//返回NaN

三、arguments

javascript還有一個免費贈送的關鍵字arguments,它只在函數的內部起作用,並且永遠指向函數的調用者所傳入的參數。arguments類似array,但是不是array。

使用場景1

function foo(x){
    console.log(x)//10
    for(var i=0;i<arguments.length;i++){
        console.log(arguments[i]);//10 20 30
    }
}
foo(10,20,30)

使用場景2

即使函數不定義任何參數,還是可以拿到參數的值:

function abs() {
    if (arguments.length === 0) {
        return 0;
    }
    var x = arguments[0];
    return x >= 0 ? x : -x;
}

abs(); // 0
abs(10); // 10
abs(-9); // 9

使用場景3

// foo(a[, b], c)
// 接收2~3個參數,b是可選參數,如果只傳2個參數,b默認爲null:
function(a,b,c){
    if(arguments.length===2){
        c = b
        b = null
    }

}

使用場景4

實現一個函數,該函數期望接受無限多個參數,整個函數返回所有參數相加之和,該函數有智能檢測功能,如碰到任意一個參數爲非Number類型時,返回'請輸入number類型'。

function add(){
    var sum = 0
    for(var i=0;i<arguments.length;i++){
        if(typeofarguments[i] === 'Number'){
            sum += arguments[i]
        } else {
            return '請輸入number類型';
        }
    }
    return sum;
}
console.log(add(1,2,3,5,6,10));

四、rest

ES6引入了rest參數

function foo(a,b,...rest){
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}
console.log(foo(1,2,3,4,5))
// 1
// 2
// [3,4,5]
foo(1);
// 結果:
// a = 1
// b = undefined
// Array []

注意:rest參數必須寫在最後一個位置,前面用...標識,從運行結果可知,傳入的參數先綁定ab,多餘的參數以數組形式交給變量rest,rest是一個數組,如果沒有給它傳值,則是一個空數組。

使用練習

//使用rest計算參數和
function foo(...rest){
    var sum = 0;
    for(var i=0;i<rest.length;i++){
       sum += rest[i]
    }
    return sum;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章