1. Định nghĩa arguments
:
Trong JavaScript, arguments
là một đối tượng đặc biệt có sẵn trong mọi hàm (ngoại trừ arrow functions). Nó chứa tất cả các đối số được truyền vào hàm khi hàm được gọi, bất kể các tham số đã được định nghĩa trong hàm hay không. Tuy nhiên, arguments
không phải là một mảng thực sự, mà là một đối tượng giống mảng (array-like object), vì vậy bạn có thể truy cập các phần tử bằng chỉ số, nhưng không thể dùng trực tiếp các phương thức của mảng như map()
hay forEach()
.
Ví dụ về arguments
:
function showArguments() { console.log(arguments); console.log(arguments[0]); // Truy cập phần tử đầu tiên console.log(arguments.length); // Số lượng đối số } showArguments(1, 'hello', true); // Outputs: // [1, 'hello', true] // 1 // 3
Nhược điểm của arguments
:
- Không phải là mảng thực sự, do đó không có các phương thức mảng.
- Không hoạt động trong arrow functions.
2. Định nghĩa Rest Parameters:
Rest parameters là cú pháp (...
) được giới thiệu trong ES6, giúp gom các đối số còn lại trong một hàm thành một mảng thực sự. Rest parameters luôn nằm ở cuối danh sách tham số trong hàm và có thể sử dụng các phương thức mảng để xử lý các đối số.
Ví dụ về Rest Parameters:
function sum(...numbers) { return numbers.reduce((total, num) => total + num, 0); // Sử dụng phương thức mảng } console.log(sum(1, 2, 3, 4)); // Outputs: 10
Ưu điểm của Rest Parameters:
- Rest parameters tạo ra một mảng thực sự, dễ dàng sử dụng các phương thức của mảng như
map()
,filter()
,reduce()
. - Dễ sử dụng và rõ ràng hơn khi viết hàm nhận số lượng tham số không xác định.
- Hoạt động cả trong hàm thông thường và arrow functions.
3. So sánh arguments
và Rest Parameters:
Tiêu chí | arguments | Rest Parameters (... ) |
---|---|---|
Loại | Đối tượng giống mảng (array-like object). | Mảng thực sự (real array). |
Khả năng sử dụng phương thức mảng | Không có các phương thức mảng. | Có thể sử dụng tất cả phương thức mảng. |
Sử dụng trong arrow functions | Không tồn tại trong arrow functions. | Hoạt động trong cả arrow functions. |
Truy cập đối số | Chứa tất cả đối số của hàm. | Chỉ chứa các đối số còn lại (sau các tham số khác). |
Vị trí tham số | Không yêu cầu vị trí cố định. | Phải là tham số cuối cùng trong hàm. |
4. Ví dụ so sánh:
- Sử dụng
arguments
:
function showArguments(a, b) { console.log(arguments); // Truy cập tất cả đối số console.log(a, b); // Truy cập theo tham số định nghĩa } showArguments(1, 2, 3, 4); // Outputs: // [1, 2, 3, 4] // 1 2
- Sử dụng Rest Parameters:
function showRest(a, b, ...rest) { console.log(rest); // Truy cập các đối số còn lại console.log(a, b); // Truy cập theo tham số định nghĩa } showRest(1, 2, 3, 4); // Outputs: // [3, 4] // 1 2
Tóm gọn lại như sau:
Arguments
là một đối tượng chứa tất cả các đối số của hàm. Nó không phải là mảng nên không thể sử dụng các phương thức của mảng.arguments
không tồn tại trong arrow functions.- Rest parameters (
...
) là một mảng chứa tất cả các đối số còn lại của hàm. Vì là mảng thực sự nên có thể dùng các phương thức mảng và hoạt động trong cả arrow functions.

Dương Trần Hà, hiện mình đang là kỹ công nghệ phần mềm và cũng là giám đốc thành lập công ty DTH Solutions. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn lập trình, nodejs, nestjs, laravel, yii2, reactjs, nextjs. Mình đã phát triển rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số thành công nhỏ, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.