javascript - How does the spread operator in ES6 JS work as a function argument? -
ok, i'm trying understand how new spread works function parameter. imagine function unknown number of parameters , adds them together.
let addnums = ...a => a.reduce ((a,b) => a+b);
this function works. so, what's problem? here's observations, followed problem:
- the spread operator function parameter / argument seems designed 'spread' array of values separate arguments:
based on research i've done, spread operator can used pass arrays functions not accept arrays arguments standard, e.g. array.prototype.push(), without having use apply
:
var x = []; var y = [1,2,3]; // array.push(arg1,arg2,...) requires separate arguments possible: x.push(...y); // 'spreads' 'y' separate arguments: x.push (arg1,arg2,...)
but array passed push
in case needs declared/defined beforehand (in case y
)
- this confirmed looking @ length of arguments object inside function
if use addnums(1,2,3,4)
, arguments.length
still == 4. so, seems function still being called addnums(1,2,3,4)
the problem
my problem i'm not calling addnums
array argument spread operator process. i'm not calling addnums([1,2,3,...])
behaviour i'm struggling understand there seems secret hidden step where, given function declared spread operator single argument:
let x = ...somesetofvalues => return ;
and called list of arguments:
x(1,2,3,4,...);
there's generation of arguments
object and variable of type array
also created same name function parameter spread operator.
perhaps obvious or trivial more experience coders, seems me counter-intuitive use cases put forward far spreading array of values across set of parameters of unknown length.
in fact, go far rather reading , splitting array across parameters, when function called multiple parameters, defined single parameter spread operator, spread operator acts similar : array.apply(null, arguments)
or var = [arg1, arg2, ...]
- ** creator not spreader **
sources research: http://es6-features.org/#spreadoperator https://developer.mozilla.org/en/docs/web/javascript/reference/operators/spread_operator spread operator es6 - particularly comment on question "@void use in function calls, i.e. if myfunc takes unknown number of arguments, can give arguments array spread. this: myfunc(...dynamicallygeneratedargs)"
after doing more research, able find reference called rest parameters.
rest parameters use ...
spread operator part of parameter, behave differently. in fact collect indefinite number of arguments/parameters , make them available array inside function.
source: link mdn description of 'rest' parameters
basically behaviour observed in first place!
Comments
Post a Comment