Function length

Brendan Eich brendan at mozilla.org
Mon Jun 11 11:49:11 PDT 2012


I would not mind removing Function 'length' but on the web you cannot 
deprecate and any browser daring to remove will appear broken to users 
not involved in the content or the engine, and users switch browsers.

Anyway, back to reality: foo.length is in ECMA-262 and we need to spec 
how it works in the presence of a trailing rest parameter. Allen has 
drafted something based on discussion here. It's a plausible design and 
hard to criticize without both your use-case (in detail) and a better 
alternative.

/be

Irakli Gozalishvili wrote:
>> I don't think any library should ever rely on f.length. 
>
> That's a wrong  attitude, there always will be legitimate uses of any 
> feature, otherwise such features are just harmful & IMO should  be 
> deprecated / removed.
>
>> It is not a
>> reliable source of information (f might use 'arguments' even when the
>> length is officially 0), and I don't honestly see it being useful for
>> anything but tertiary debugging purposes.
>
> In some cases weather function captures `rest` arguments via 
> `arguments` is irrelevant. Like in a case I've pointed out earlier. 
> Library provides arity based dispatch based on f.length, so if you 
> pass `function() { arguments…. }` it will never be called with more 
> than 0 arguments.
>
> Regards
> --
> Irakli Gozalishvili
> Web: http://www.jeditoolkit.com/
>
> On Monday, 2012-06-11 at 05:33 , Andreas Rossberg wrote:
>
>> On 10 June 2012 03:52, Irakli Gozalishvili <rfobic at gmail.com 
>> <mailto:rfobic at gmail.com>> wrote:
>>> I just noticed strange behavior in spider monkey implementation of rest
>>> arguments:
>>>
>>> (function(a, b, ...rest) {}).length // => 2
>>>
>>> I think ignoring `rest` in length is pretty counter intuitive. For 
>>> example I
>>> have small utility function that
>>> I use to dispatch depending on argument length.
>>>
>>> var sum = dispatcher([
>>>   function() { return 0 },
>>>   function(x) { return x },
>>>   function(x, y) { return x + y },
>>>   function(x, y, z) { return Array.prototype.slice.call(arguments,
>>> 1).reduce(sum, x) }
>>> ])
>>
>> I don't think any library should ever rely on f.length. It is not a
>> reliable source of information (f might use 'arguments' even when the
>> length is officially 0), and I don't honestly see it being useful for
>> anything but tertiary debugging purposes.
>>
>> /Andreas
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss


More information about the es-discuss mailing list