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

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

Dùng ...têncuố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ị