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 =>

      if (err != null) return reject(err)
      else return resolve();
    });
  }));
```

On Tue, Aug 11, 2015, 20:45 Leonardo Wolter <leocwol...@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 <leocwol...@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 <dehrenb...@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 <leocwol...@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 <dehrenb...@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 <
>>> jacobparker1...@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@mozilla.org
>>> >> > https://mail.mozilla.org/listinfo/es-discuss
>>> >> _______________________________________________
>>> >> es-discuss mailing list
>>> >> es-discuss@mozilla.org
>>> >> https://mail.mozilla.org/listinfo/es-discuss
>>> >
>>> >
>>>
>>
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to