JavaScript Demo: Functions Rest Parameters
我們在後面把不定參數叫做 rest參數
爲了幫助我們創建更靈活的功能,ES6引入了rest參數作爲功能參數。使用rest參數,您可以創建帶有可變數量參數的函數。這些參數存儲在一個數組中,以後可以從函數內部進行訪問。 查看以下代碼:
function howMany(...args) {
return "You have passed " + args.length + " arguments.";
}
console.log(howMany(0, 1, 2)); // You have passed 3 arguments.
console.log(howMany("string", null, [1, 2, 3], { }));
rest參數消除了檢查args數組的需要,並允許我們在參數數組上應用map(),filter()和reduce()。
來個小測
使用rest參數修改函數求和,使函數求和能夠接受任意數量的參數並返回其和
const sum = (x, y, z) => {
const args = [x, y, z];
return args.reduce((a, b) => a + b, 0);
}
改寫後
const sum = (...args) => {
return args.reduce((a, b) => a + b, 0);
}
補充:map(),filter(),reduce的用法
注:下面圖文來自楊二小博客
Map、Filter和Reduce常常被用於對一個數組做一些操作,進而轉換成某個新的東西(數據類型不一定還是數組哦~)。下面是我對這三個API的直觀認識:
Map
你想將一個數組中的每一項做個轉換,結果生成了一個新數組,並且新數組的長度和原數組一致。
Filter
你想將一個數組做一個過濾,按照某規則提取出一些特定的項來。結果也生成了一個新數組,但新數組的長度小於或等於原數組。
Reduce
你想通過遍歷一個數組的每一項來計算出一個新東西,最後生成的結果可以是任何類型的變量:一個新數組,一個新對象,一個新布爾值…
es5其實已經有過類似用法 叫argument
argument
argument拿出來講是因爲,rest參數是es6的內容,argument是之前的,可以作爲補充瞭解。
argument 文檔中解釋它爲“類數組”,像數組但卻沒其內置方法 諸如 foreach(),map()
function func1(a, b, c) {
console.log(arguments[0]);
// expected output: 1
console.log(arguments[1]);
// expected output: 2
console.log(arguments[2]);
// expected output: 3
}
func1(1, 2, 3);