What is the arguments object vs rest parameters?
Two ways to access multiple function arguments.
arguments — an array-like object in regular functions; holds all arguments but lacks array methods.
Rest parameters (...args) — a real array, works in arrow functions, and captures only the parameters you specify.
Prefer rest parameters — clearer, more flexible, and they give you genuine array methods.
// arguments (legacy)
function sum() {
console.log(arguments); // { 0: 1, 1: 2, 2: 3, length: 3 }
return Array.from(arguments).reduce((a, b) => a + b, 0);
}
sum(1, 2, 3); // 6
// Rest parameters (modern)
function sumModern(...numbers) { // Real array!
return numbers.reduce((a, b) => a + b, 0);
}
sumModern(1, 2, 3); // 6
// Rest collects remaining args
function log(level, ...messages) {
console.log(`[${level}]`, ...messages);
}
log('INFO', 'User', 'logged in'); // [INFO] User logged in
// Arrow functions — no arguments
const arrow = (...args) => args.reduce((a, b) => a + b, 0);
// const broken = () => arguments; // ReferenceError in arrow!arguments is array-like (needs Array.from to use array methods). Rest parameters are a real array. Rest can collect 'remaining' arguments after named ones (level, ...messages).
Arrow functions have no arguments — must use rest parameters. Rest is clearer and more flexible.
arguments is legacy (array-like, no arrow functions). Rest parameters are modern (real array, works everywhere).
Key advantage: rest collects 'the rest' after named params. Always use rest in modern code.