網頁

2015年6月15日 星期一

JavaScript 可變參數函式撰寫與其參數傳遞

用一個簡單的例子示範JavaScript的可變參數函數
function demo () { console.log(arguments); }
demo (1, 2 , 3 , 4);

// output
[1, 2, 3, 4]

可以從這邊得知 JavaScript 實際上是用類似陣列的方式處理傳入的參數
傳進去的所有參數會用 arguments 這個函式自身的變數儲存
即使函式撰寫時不註明會使用到的參數也不會影響

C++或Java的 Programmer 應該都很習慣 function overloading(method overloading)的使用
只要參數不同,就會是不同版本的函式
但是對 JavaScript 就不是如此
它會將同名的函式視作相同的物件,只是使用者傳入長度不一樣的陣列
function overloading的寫法在JavaScript會變成覆寫函式,算是初學者要注意的地方

JavaScript的arguments物件只要用陣列的一般處理方式就能接觸到所有參數
function demo2 () {
    for(var i = 0, max = arguments.length; i < max; i++){
   console.log(arguments[i]);
}
}

使用可變參數函式還可能碰到一個需求
怎麼樣將一個可變參數的函式傳遞到另一個可變參數函式呢?
function demo3 () {
    demo2.apply(this, arguments);
}
demo3(1, "test")

// output
1
test


這個是我覺得比較簡潔的方式
用JavaScript function 的 apply 機制讓它過程中套用到另一個函式

沒有留言:

張貼留言