Bỏ qua để đến nội dung

Rest Parameters (Gom Phần Còn Lại)

Dùng ...tên ở cuối danh sách tham số để gom mọi đối số còn lại thành một mảng thật (Array).


function fn(first, second, ...rest) { ... }

function sum(...nums) {
return nums.reduce((s, n) => s + n, 0);
}
sum(1, 2, 3); // 6
sum(10, 20); // 30
sum(); // 0 (mảng rỗng → giá trị khởi tạo 0)

// ...nums GOM các đối số lại thành mảng
function sum(...nums) {
return nums.reduce((s, n) => s + n, 0);
}

Rest phải ở cuối

...rest phải là tham số cuối cùng:

// ✅
function ok(a, b, ...rest) {}
// ❌ SyntaxError
function bad(...rest, last) {}

Mỗi hàm chỉ 1 rest

Không thể có 2 rest parameters:

// ❌ SyntaxError
function bad(...a, ...b) {}

Default trước rest

Thứ tự khuyến nghị: bắt buộc → default → rest:

function api(url, method = 'GET', ...headers) {
// url: bắt buộc
// method: có default
// headers: gom phần còn lại
}

rest ≠ arguments

rest là mảng thật, arguments là array-like:

function demo(a, ...rest) {
rest.map(x => x); // ✅ Array
// arguments.map(x => x) // ❌ TypeError
}

... cũng dùng trong destructuring (không chỉ function parameters):

const [first, second, ...rest] = [1, 2, 3, 4, 5];
console.log(first); // 1
console.log(rest); // [3, 4, 5]

Đặc điểmChi tiết
Cú pháp...name ở cuối danh sách tham số
Kiểu dữ liệuArray thật (có .map(), .filter())
Vị tríPhải là tham số cuối cùng
Số lượngTối đa 1 rest parameter mỗi hàm
fn.lengthKhông tính rest
Khác argumentsMảng thật, có trong arrow function
Spread (...arr)Ngược lại: trải mảng → nhiều giá trị