函數

  1. 通過函數可以封裝任意多條語句,而且可以在任何地方任何時候調用執行。
  2. ECMAScript函數在定義時不必指定是否返回值。
  3. 任何函數在任何時候都可以通過return語句後跟要返回的值來返回值。
  4. 函數會在執行完return語句之後停止並立即退出。所以位於return語句之後的任何代碼都永遠不會執行。
function sum(num1,num2) {
    return num1+num2;
    alert("hello world");    //永遠不會執行
}

5.ECMAScript函數不介意傳遞進來多少個函數,也不在乎傳進來的參數是什麼數據類型。因爲ECMAScript中的參數在內部是用一個數組來表示的,函數接收到的始終是這個數組,而不關心數組中包含哪些參數。另外,在函數體內可以通過arguments對象來訪問這個參數數組從而獲取傳遞給函數的每一個參數。這是ECMAScript函數的一個重要特點:命名的參數只提供便利,但不是必須的。

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

6.

function doAdd(num1,num2) {
    arguments[1]=10;
    alert(arguments[0]+num2);    //num2=10
}
doAdd(1,2);                     //11

雖然num2和arguments[1]的值會同步,但它們的內存空間是獨立的。
另外,arguments對象的長度是由傳入的參數個數決定的,不是由定義函數時的命名參數的個數決定的。例如:如果只傳入一個參數,那麼arguments[1]設置的值不會反應到命名參數中。

function doAdd(num1,num2) {
    arguments[1]=10;
    alert(arguments[0]+num2);    //num2=10
}
doAdd(1);                       //NaN

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

7.重載:函數或者方法有相同的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之爲重載函數或者方法。
在java中,可以爲一個函數編寫兩個定義,只要這兩個定義的簽名(接受的參數的類型和數量)不同即可。但ECMAScript函數不能像傳統意義上那樣實現重載,因爲其參數是由包含零或多個值的數組來表示的。沒有函數簽名,真正的重載是不可能做到的。如果在ECMAScript中定義了兩個名字相同的函數,則該名字只屬於後定義的函數。

function addSomeNumber(num) {
    return num+100;
}
function addSomeNumber(num) {
    return num+200;
}
var result = addSomeNumber(100);        //result=300

8.如果偏要javascript實現重載的話,可以從兩點來考慮,
(1)通過arguments的length值進行判斷。
例如:

function doAdd( num1, num2 ) {
    if( arguments.length >= 2 ) {
        alert(num1+num2);
    }
    else {
        alert("error");
    }
}

(2)判斷傳入參數的類型。

function sayHi(name) {
    if( typeof name === 'undefined' ) {
        alert("please enter your name");
    }
    else {
        console.log("hello," + name);
    }
}
發佈了41 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章