用一個簡單的例子示範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 機制讓它過程中套用到另一個函式
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 機制讓它過程中套用到另一個函式
留言
張貼留言