Self-recursion and arrow functions

Matthew Robb matthewwrobb at gmail.com
Sun Mar 17 18:50:11 PDT 2013


I know I am late to this party and I am not sure how serious it even is but
can someone help me understand why function expressions require anything
special to denote the fact that it's a function?

`
requestAnimationFrame(onFrame(time) { })
`

The following seems a pretty convenient side benefit:
`
let onFrame(){}
const onFrame(){}
var onFrame(){}
function onFrame(){}
`

I feel like there must be something obviously impossible about this that I
am not considering.


On Sun, Mar 17, 2013 at 5:49 PM, Rick Waldron <waldron.rick at gmail.com>wrote:

>
>
>
> On Sun, Mar 17, 2013 at 7:10 PM, Jorge Chamorro <jorge at jorgechamorro.com>wrote:
>
>> On 17/03/2013, at 14:33, Mark S. Miller wrote:
>>
>> > Just in case anyone does not realize that this thread is humorous,
>> >
>> >     const factorial = n => n>1 ? n*factorial(n-1) : 1;
>> >
>> > Yes, you can't use this as an expression. So what? After this
>> declaration you can use factorial as an expression.
>>
>> IIRC the possibility of *simply* using 'ƒ' (instead of 'function') for
>> lambdas, which is a syntax that's immediately familiar to any JS developer:
>>
>> [1,2,3,4,5,6].map(ƒ factorial(n) { n>1 ? n*factorial(n-1) : 1 });
>>
>
> This road is a dead end—previously proposed by Axel last year and Brendan
> 3 years ago (I can't spend anymore time going further back to see if it
> appeared prior to that)
>
> https://mail.mozilla.org/pipermail/es-discuss/2012-January/019852.html
>
>  ...which you backed:
>
> https://mail.mozilla.org/pipermail/es-discuss/2012-January/019857.html
>
> ...but François Remy's concerns still stand:
>
> https://mail.mozilla.org/pipermail/es-discuss/2012-January/019864.html
>
> ...and Brendan's point about backwards compatibility is irrefutable:
>
> https://mail.mozilla.org/pipermail/es-discuss/2012-January/019860.html
>
>
> As promised, three years ago, Brendan proposes here:
>
> https://mail.mozilla.org/pipermail/es-discuss/2010-April/011010.html
>
> And kills it himself here:
>
> https://mail.mozilla.org/pipermail/es-discuss/2010-April/011034.html
>
>
>
>
> snip
>
>
>> But Brandon Benvie was pointing out at the problem: "Relying on the
>> defined name they're assigned to suffers from the "can be redefined"
>> problem":
>>
>> var factorial= (n)=> n>1 ? n*factorial(n-1) : 1;
>>
>
> use const?
>
>
>
>>
>> The factorial lambda above depends on a free var to function properly
>> which is a hazard.
>>
>> It never ocurred to me that using const instead of var/let as you've done
>> above fixes that, thank you!
>>
>> Still, ƒ named lambdas have the advantage that can be used directly as
>> expressions, without going through any const roundabouts.
>>
>
> But they aren't part of ES6 and Arrow Functions are; if you need a named
> function expression, then use a named function expression, they aren't
> going anywhere.
>
>
> Rick
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>


-- 
- Matthew Robb
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20130317/1a77bd30/attachment.html>


More information about the es-discuss mailing list