Function length

Irakli Gozalishvili rfobic at gmail.com
Sat Jun 9 18:52:50 PDT 2012


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) }
]) 

This behavior of rest would obviously break assumptions made by this library. That being said I don't think `3` would be any better. Maybe such functions length should be:

- Infinity ?
- 2.5 ?

That way libraries would be able to handle them in a nice way:

var sum = dispatcher([
  () => 0,
  (x) => x,
  (x, y) => x + y,
  (x, ...rest) => rest.reduce(sum, x)
])


Regards
--
Irakli Gozalishvili
Web: http://www.jeditoolkit.com/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120609/9f629bc4/attachment.html>


More information about the es-discuss mailing list