On Jun 9, 2012, at 6:52 PM, Irakli Gozalishvili wrote:
> I just noticed strange behavior in spider monkey implementation of rest
> arguments:
>
> (function(a, b, ...rest) {}).length // => 2
>
That answer is consistent with what is specified in the ES6 draft spec. The
actual value is specified algorithmically and is summarized by this note:
NOTE The ExpectedArgumentCount of a FormalParameterList is the number of
FormalParameters to the left of either the rest parameter or the first
FormalParameter with an Initialiser. A FormalParameter without an initializer
are allowed after the first parameter with an initializer but such parameters
are considered to be optional with undefined as their default value.
See section 13.1.
The draft is based upon the conclusions that were reached when this was last
discussed. See the thread starting
https://mail.mozilla.org/pipermail/es-discuss/2011-August/016361.html
There is no obviously "right" answer to what should be reported as the length
(and it isn't clear whether this property really has any utility). The closest
thing we have to legacy precedent are these statement from previous versions of
the spec:
15 Every built-in Function object described in this clause—whether as a
constructor, an ordinary function, or both—has a length property whose value is
an integer. Unless otherwise specified, this value is equal to the largest
number of named arguments shown in the subclause headings for the function
description, including optional parameters.
15.3.5.1 The value of the length property is an integer that indicates the
“typical” number of arguments expected by the function.
Note that that the the legacy description is not particularly self consistent
and that where a length value is "other specified" for various built-in
functions it tends to follow the 15.3.5.1 rule.
Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss