Interesting, unless we haven't `...rest` already. Otherwise, sounds as an
overhead (and really just a workaround to fix a particular issue, but not a
very useful language construct) to me. Since in the ES6 world, if a
function is designed to work with variant number of arguments, this should
(naturally) be done via `...rest` arguments.
The overhead is: `(...args, #argsCount) => {}`: in this case `args.length`
and `#argsCount` do the same, that increases the ways of doing two the same
things with different approaches (not the best of way).
So yeah, I'd assume the second way of implementation in your example (with
destructing or whatever) as a more natural and straightforward.
Dmitry
On Sunday, November 10, 2013, Allen Wirfs-Brock wrote:
> One of the the few remaining uses of a function's 'arguments' binding is
> to determine the actual number of passed arguments. This is necessary in
> some overloading scenarios where a function has different behavior when an
> argument is completely absent then it has when undefined (or any other
> default value) is explicitly passed in that parameter position. That
> situation occurs in a number of DOM APIs and even a few ES library
> functions.
>
> For example(see https://bugs.ecmascript.org/show_bug.cgi?id=1877 ),
> Array.prototype.splice returns different results for:
> [1,2,3].splice()
> and
> [1,2,3].splice(undefined)
>
> The natural ES6 declaration for a splice function is:
>
> function splice(start, deleteCount, ...items) {...
>
> but if you write it this way then within the body you have to have a test
> like:
>
> if (arguments.length == 0) {...
>
> to implement the correct web-compatable behavior.
>
> Or, alternatively you could declare the functions as:
>
> function splice(...actualArgs) {
> let [start, stop, ...item] = actualArgs;
> ...
> if (actualArgs.length == 0) {...
>
> So, to implement a Web-compaable version of splice you either have to use
> 'arguments' to determine the actual number of passed objects or you need to
> declare it with a bogus parameter pattern and use explicit or implicit
> destructuring to parse out the positional parameters.
>
> One way around this dilemma would be to provide a syntactic affordance for
> determing the actual argument count. For example, one possibility would be
> to allow the last item of any formal parameter list to be an item of the
> syntactic form:
>
> ActualArgumentCount : '#' BindingIdentifier
>
> So, the declaration for splice could then be:
>
> function splice(start, deleteCount, ...items, #argCount) {
> ...
> if (argCount == 0) {...
>
> Thoughts?
>
> Allen
>
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss