πŸ”΄ HardClosures & ScopeπŸ’» Output Question

Spread vs rest in different positions

πŸ’‘

Hint

... is context-dependent: "rest" when collecting into an array (parameter or destructuring), "spread" when expanding an array into individual values.

What does this output?

function fn(first, ...rest) {
  console.log(first);
  console.log(rest);
}

const arr = [1, 2, 3, 4, 5];
fn(...arr);

const [a, b, ...remaining] = arr;
console.log(a);
console.log(b);
console.log(remaining);

Correct Output

1
[2, 3, 4, 5]
1
2
[3, 4, 5]

Why this output?

Explanation: fn(...arr) expands arr as individual args: first=1, rest=[2,3,4,5]. Array destructuring: a=1, b=2, remaining=[3,4,5]. Same syntax ... means rest in param position, spread in expression position.

Key Insight: ... is context-dependent: "rest" when collecting into an array (parameter or destructuring), "spread" when expanding an array into individual values.

More Closures & Scope Output Questions

🟒 EasyClassic var in loop closureβ†’πŸŸ’ Easylet in loop closure (fix)β†’πŸŸ‘ MediumClosure counterβ†’πŸŸ‘ MediumIIFE closureβ†’

Practice predicting output live β†’

66 output questions with instant feedback

πŸ’» Try Output Quiz