Cách 1: arguments object (ES5)
Đối tượng arguments giống mảng, chứa tất cả đối số truyền vào.
function sum() {
var total = 0;
for (var i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
sum(1,2,3,4); // 10
Nhược điểm: Không phải mảng thật (không có map, filter), không hoạt động trong arrow function.
Cách 2: Rest parameters (ES6) – Khuyên dùng
function sum(...numbers) {
return numbers.reduce((acc, n) => acc + n, 0);
}
sum(1,2,3,4); // 10
- Hỗ trợ destructuring, spread.
- Có thể kết hợp tham số cố định:
function multiply(factor, ...nums).
numbers là mảng thật.
Cách 3: Spread operator khi gọi
var args = [1,2,3];
sum(...args); // truyền từng phần tử
So sánh nhanh
| Đặc điểm | arguments | Rest params |
|---|---|---|
| Kiểu | Array-like | Array thật |
| Arrow function | Không có | Có |
| Destructuring | Không | Có |
| Tham số khác | Khó tách | Dễ dàng |