Usage of rest parameter and spread operator in javascript
ecmascript-6, javascript, rest-parameters, spread-syntax
Solution
Is the difference between them is just syntax or there's a performance issue?
Both, and more...
Rest parameters:
- Are a known idiom in other languages (Ruby, Python).
- Are esier to read and maintain (vs. `slice`).
- Are easier to understand for beginners.
- Can (and likely will) result in better performance, since engines can optimize.
- Are tool friendlier, as they can be analyzed statically.
Problem
What's the usage of rest parameter that will be added in ECMAScript 6? For example, in ECMAScript 5 you can do the following to get an array of parameters starting from the second element: ``` // ES 5 store('Joe', 'money'); store('Jane', 'letters', 'certificates'); function store(name) { var items = [].slice.call(arguments, 1); //['money'] in first case items.forEach(function (item) { vault.customer[name].push(item); }); } ``` and that will be equivalent to the following code in ECMAScript 6: ``` // ES 6 store('Joe', 'money'); store('Jane', 'letters', 'certificates'); function store(name, ...items) { items.forEach(function (item) { vault.customer[name].push(items) }); } ``` Is the difference between them is just syntax or there's a performance issue? Also for spread operator (...) ``` //in ecmascript5 var max = Math.max.apply(null, [14, 3, 77]); //but in ecmascript6 var max = Math.max(...[14, 3, 77]); ``` Is this just syntax change or performance issue?