Named Arrow Functions

Isiah Meadows isiahmeadows at gmail.com
Wed Aug 12 01:57:59 UTC 2015


Sent this too early... Corrected inline.

On Tue, Aug 11, 2015, 21:56 Isiah Meadows <isiahmeadows at gmail.com> wrote:

The real reason people need named arrow functions, the biggest use case is
for event handlers.

```js
let p = new Promise((resolve, reject) =>
  setTimeout((x => () => x(x))(handler => {
    onNotNeeded(() => clearTimeout(handler));

    // `return` is to take advantage of TCO
    return doSomethingAsync(err => {
      if (err != null) return reject(err)
      else return resolve();
    });
  }));
```

By the way, the way I created a self reference is a complete lambda
calculus hack.

<deviation>
If you'd like your eyes to bleed, here's one that is purely out if lambdas.
I couldn't help myself.

```js
let p = new Promise((resolve, reject) =>
  setTimeout((x => () => x(x))(h =>
    x => y => y(x()))(
      onNotNeeded(() => clearTimeout(h)))(
      doSomethingAsync(e =>


e

!= null

?

reject(err)

:

  resolve()

)))

);
```

On Tue, Aug 11, 2015, 20:45 Leonardo Wolter <leocwolter at gmail.com> wrote:

Well, I found out arguments is actually a reserved word too haha

About that:

 If they're not from the tiny set of remaining reserved words
(enum, anyone?), they can be users' identifiers, and have to be based
contextually on some enclosing syntax, like yield is.

That could be it, right? Since it would be only available at arrow
functions(anon functions too?)

2015-08-11 21:42 GMT-03:00 Leonardo Wolter <leocwolter at gmail.com>:

Yeah., that's what I meant.

My proposal is not a keyword, but an hidden variable included at functions
(e.g. arguments).

Does arrow functions have any limitations about that?

2015-08-11 21:35 GMT-03:00 Daniel Ehrenberg <dehrenberg at chromium.org>:

I assume you mean more like this (without factorial):

 x.map((x) => do {
        if (x <= 1) {
            1;
        } else {
            x * recur(x - 1)
        }
    });

One issue is that it's hard to add keywords to JavaScript at this
point. If they're not from the tiny set of remaining reserved words
(enum, anyone?), they can be users' identifiers, and have to be based
contextually on some enclosing syntax, like yield is.

Another downside is that then, arrow functions have a distinct and
less powerful method of recursing (e.g., nested functions won't be
able to see the binding to the outer one).

Dan

On Tue, Aug 11, 2015 at 5:30 PM, Leonardo Wolter <leocwolter at gmail.com>
wrote:
> What about a clojure like recur hidden variable binded to the bottom-level
> function?
>
>  x.map(factorial(x) => do {
>         if (x <= 1) {
>             1;
>         } else {
>             x * recur(x - 1)
>         }
>     });
>
> 2015-08-11 21:26 GMT-03:00 Daniel Ehrenberg <dehrenberg at chromium.org>:
>>
>> In addition to being hard to parse in general, I don't think this
>> would play very well with the async/await proposal
>> https://tc39.github.io/ecmascript-asyncawait/ , which wants to have
>> arrow functions like
>>
>> async (x) => ...
>>
>> Because we can't count on async as a keyword, your proposal would
>> create an ambiguity.
>>
>> On Tue, Aug 11, 2015 at 1:49 PM, Jacob Parker <jacobparker1992 at gmail.com>
>> wrote:
>> > I did look, but couldn’t find anything on named arrow functions were
not
>> > included. I do sometimes find cases where I want recursion inside a
class
>> > function definition, and still need access to `this`. Was it just seen
as
>> > syntax bloat, or were there any complications to implementing it?
>> >
>> > Obviously a contrived example, but something like this (using do syntax
>> > too)
>> >
>> >     x.map(factorial(x) => do {
>> >         if (x <= 1) {
>> >             1;
>> >         } else {
>> >             x * factorial(x - 1)
>> >         }
>> >     });
>> >
>> > _______________________________________________
>> > es-discuss mailing list
>> > es-discuss at mozilla.org
>> > https://mail.mozilla.org/listinfo/es-discuss
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>
>


_______________________________________________
es-discuss mailing list
es-discuss at mozilla.org
https://mail.mozilla.org/listinfo/es-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150812/67c00145/attachment-0001.html>


More information about the es-discuss mailing list