Suggestions for using `...arguments` while working with functions in javascript.

gokatz profile image Gokul Kathirvel 惻1 min read

In many situations, using arguments to pass the function args would lead to bugs as we totally unaware the actual args. When to use these such notations and when not to?


markdown guide

First note, try not to use arguments as it was reserved in the past and not allowed in strict mode anymore.

Also are you referring to function_call(...args); or function call_me(...args) {}?


That is a type of array destructuring and can be used to pass the elements of an array to a function.

const array = [ 4, 2 ];
const sixteen = Math.pow(...array);

is equivalent to

const sixteen = Math.pow(4, 2);
// or
const sixteen = Math.pow(array[0], array[1], /* ... */);

yeah, but in a component model, when handling functions, it becomes black box

passToAnotherFunc() {

now, I completely unaware of the argument list!

the value of arguments here is the value of the arguments passed to passToAnotherFunc. See the deprecated arguments object

Wait, the arguments isn't deprecated, it's only arguments.caller property that's non-standard and deprecated.

Combining Meghan's two earlier responses, a better way would be:

passToAnotherFunc(...args) {

But I feel it's unlikely you'd need to write this kind of code. Could you give a real-world example?

@antjanus it's not deprecated per-se but it is disabled in strict and module mode.

@shalvah +1 because instead of calling passToAnotherFunc to call handleItSomewhere, why not just call handleItSomewhere?

I had no idea it was disabled in strict/module mode!


Is useful, for example, if doesn't matter how many parameters receive the function:

const sum = (...numbers) => numbers.reduce((a, b) => a + b, 0);

sum(1, 4); // 5
sum(2, 3, 4); // 9

Generally speaking you should only use it if you were writing some library i guess. Most of the time i just use it for debugging. But you're right that it would probably be buggy in most cases.