Javascript學習筆記-基本概念-函數

ECMAScript 中的函數使用function 關鍵字來聲明,後跟一組參數以及函數體。函數的基本語法以下所示:數組

function functionName(arg0, arg1,...,argN) {
    statements
}

 函數示例:函數

function sayHi(name, message) {
    alert("Hello " + name + "," + message);
}

調用sayHi()函數的代碼以下所示:spa

sayHi("Nicholas", "how are you today?");

 

ECMAScript 中的函數在定義時沒必要指定是否返回值。code

function sum(num1, num2) {
    return num1 + num2;
}

 調用這個函數的示例代碼以下:對象

var result = sum(5, 10);

 這個函數會在執行完return 語句以後中止並當即退出。blog

一、理解參數

ECMAScript 函數不介意傳遞進來多少個參數,也不在意傳進來參數是什麼數據類型。ip

ECMAScript 中的參數在內部是用一個數組來表示的。ci

函數也能夠像下面這樣重寫,即不顯式地使用命名參數:string

function sayHi() {
    alert("Hello " + arguments[0] + "," + arguments[1]);
}

 命名的參數只提供便利,但不是必需的。io

經過訪問arguments 對象的length 屬性能夠獲知有多少個參數傳遞給了函數。下面這個函數會在每次被調用時,輸出傳入其中的參數個數:

function howManyArgs() {
    alert(arguments.length);
}
howManyArgs("string", 45);  //2
howManyArgs();         //0
howManyArgs(12);        //1

 

函數可以接收任意個參數並分別實現適當的功能。

function doAdd() {
    if(arguments.length == 1) {
        alert(arguments[0] + 10);
    } else if (arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
    }
}
doAdd(10); //20
doAdd(30, 20); //50

arguments 對象能夠與命名參數一塊兒使用。

function doAdd(num1, num2) {
    if(arguments.length == 1) {
        alert(num1 + 10);
    } else if (arguments.length == 2) {
        alert(arguments[0] + num2);
    }
}

arguments 對象的長度是由傳入的參數個數決定的,不是由定義函數時的命名參數的個數決定的。

沒有傳遞值的命名參數將自動被賦予undefined 值。

二、沒有重載

ECMAScript 函數不能像傳統意義上那樣實現重載。ECMAScirpt函數沒有簽名,由於其參數是由包含零或多個值的數組來表示的。而沒有函數簽名,真正的重載是不可能作到的。

若是在ECMAScript 中定義了兩個名字相同的函數,則該名字只屬於後定義的函數。

function addSomeNumber(num){
    return num + 100;
}

function addSomeNumber(num) {
    return num + 200;
}

var result = addSomeNumber(100); //300
相關文章
相關標籤/搜索