rest參數(shù)是JavaScript中用于收集函數(shù)多余參數(shù)為數(shù)組的語法特性。它使用三個點…加變量名的形式,如function example(…args),將傳入的多個參數(shù)自動收集為數(shù)組,便于操作。應用場景包括:1. 處理不確定數(shù)量的參數(shù),如實現(xiàn)靈活的加法函數(shù);2. 與解構(gòu)結(jié)合使用,提取數(shù)組剩余元素;3. 函數(shù)代理時轉(zhuǎn)發(fā)參數(shù),避免手動傳遞。注意事項有:必須是函數(shù)最后一個參數(shù)、不能和arguments混用、在箭頭函數(shù)中需依賴rest參數(shù)。掌握后可提升處理多參數(shù)場景的效率和代碼清晰度。
在JavaScript中,rest參數(shù)是一種語法特性,用來表示函數(shù)中不確定數(shù)量的參數(shù)。它允許我們將一個不定數(shù)量的參數(shù)表示為一個數(shù)組,簡化了對多個參數(shù)的操作。
什么是rest參數(shù)?
簡單來說,rest參數(shù)就是用三個點 … 加上一個變量名的形式,把多余的參數(shù)“收集”起來,變成一個數(shù)組。例如:
function example(...args) { console.log(args); } example(1, 2, 3); // 輸出 [1, 2, 3]
在這個例子中,…args 就是rest參數(shù)。無論你傳多少個參數(shù)進去,都會被自動放進一個數(shù)組里。
注意:一個函數(shù)中只能有一個rest參數(shù),并且它必須是最后一個參數(shù)。
rest參數(shù)的實際應用場景
1. 處理不確定數(shù)量的參數(shù)
當你寫一個函數(shù),不知道用戶會傳幾個參數(shù)時,使用rest參數(shù)比 arguments 對象更直觀、方便。
比如,寫一個加法函數(shù):
function sum(...numbers) { return numbers.reduce((total, num) => total + num, 0); } sum(1, 2, 3); // 6 sum(5, 10); // 15
相比以前用 arguments,現(xiàn)在代碼更清晰也更容易操作。
2. 和解構(gòu)結(jié)合使用
rest參數(shù)也常用于數(shù)組或?qū)ο蟮慕鈽?gòu)賦值中,比如:
const [first, ...rest] = [1, 2, 3, 4]; console.log(rest); // [2, 3, 4]
這里,first 是第一個元素,剩下的都放到 rest 數(shù)組中。
3. 函數(shù)代理(轉(zhuǎn)發(fā)參數(shù))
有時候你想定義一個函數(shù),把所有參數(shù)原樣傳給另一個函數(shù),這時候可以用rest參數(shù)配合展開運算符(spread)一起使用:
function log(...args) { console.log('收到參數(shù):', args); anotherFunction(...args); }
這樣可以避免手動一個個傳遞參數(shù),非常靈活。
常見錯誤和注意事項
-
rest參數(shù)必須是最后一個參數(shù)
下面這種寫法是錯的:function wrong(a, ...rest, b) {} // ? 報錯
-
不能和 arguments 混用
在箭頭函數(shù)中沒有 arguments,所以必須用rest參數(shù)代替。 -
不是真正的數(shù)組,但像數(shù)組一樣操作
rest參數(shù)本身是一個真正的數(shù)組,可以直接使用 .map、.Filter 等方法。
基本上就這些。掌握rest參數(shù)之后,你會發(fā)現(xiàn)它在處理多參數(shù)場景時非常實用,尤其是在封裝工具函數(shù)或者需要靈活接口的地方。