<div dir="ltr"><div>Ups, I answered only to Jacob but I think this is a real simple solution:<br><br>    var factorial;<br>    x.map(factorial = x =>  x < 1 ? 1 : x * factorial(x-1));<br><br>Or simply:<br><br>    var factorial = x =>  x < 1 ? 1 : x * factorial(x-1);<br>    x.map(factorial);<br><br>As you said, this is ocassionally needed. And for event handlers:<br>    <br></div><div>    var once = evt => { button.onclick = null; onClick(evt) };<br></div>    button.onclick = once;<br><div><br></div><div>And yes, this solution was already provided:<br><a href="https://esdiscuss.org/topic/self-recursion-and-arrow-functions#content-10">https://esdiscuss.org/topic/self-recursion-and-arrow-functions#content-10</a><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 12, 2015 at 4:00 AM, Isiah Meadows <span dir="ltr"><<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">And as Kevin said, it has been mentioned before (with event handlers and timeouts as the initial driving force). </p>
<p dir="ltr"><a href="https://esdiscuss.org/topic/self-recursion-and-arrow-functions" target="_blank">https://esdiscuss.org/topic/self-recursion-and-arrow-functions</a></p><div class="HOEnZb"><div class="h5">
<br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 11, 2015, 21:57 Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Sent this too early... Corrected inline. <br>
</p>
<p dir="ltr"></p>
<p dir="ltr">On Tue, Aug 11, 2015, 21:56 Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>> wrote:</p>
<blockquote><p dir="ltr">The real reason people need named arrow functions, the biggest use case is for event handlers. </p>
<p dir="ltr">```js<br>
let p = new Promise((resolve, reject) =><br>
  setTimeout((x => () => x(x))(handler => {<br>
    onNotNeeded(() => clearTimeout(handler));</p>
<p dir="ltr">    // `return` is to take advantage of TCO<br>
    return doSomethingAsync(err => {<br>
      if (err != null) return reject(err)<br>
      else return resolve();<br>
    });<br>
  }));<br>
```</p>
<p dir="ltr">By the way, the way I created a self reference is a complete lambda calculus hack. </p>
<p dir="ltr"><deviation><br>
If you'd like your eyes to bleed, here's one that is purely out if lambdas. I couldn't help myself.</p>
<p dir="ltr">```js<br>
let p = new Promise((resolve, reject) =><br>
  setTimeout((x => () => x(x))(h =><br>
    x => y => y(x()))(<br>
      onNotNeeded(() => clearTimeout(h)))(<br>
      doSomethingAsync(e =><br>
        </p>
</blockquote>
<blockquote><p dir="ltr">e</p>
</blockquote>
<blockquote><p dir="ltr"> != null</p>
</blockquote>
<p dir="ltr"> ?</p>
<blockquote><p dir="ltr"> reject(err)</p>
</blockquote>
<p dir="ltr"> :</p>
<blockquote><p dir="ltr">  resolve()</p>
</blockquote>
<p dir="ltr">)))</p>
<blockquote><p dir="ltr">);<br>
```<br></p>
<p dir="ltr">On Tue, Aug 11, 2015, 20:45 Leonardo Wolter <<a href="mailto:leocwolter@gmail.com" target="_blank">leocwolter@gmail.com</a>> wrote:</p>
</blockquote>
<blockquote><blockquote><p dir="ltr">Well, I found out arguments is actually a reserved word too haha<br></p>
<p dir="ltr">About that:<br></p>
<p dir="ltr"> If they're not from the tiny set of remaining reserved words<br>
(enum, anyone?), they can be users' identifiers, and have to be based<br>
contextually on some enclosing syntax, like yield is.<br></p>
<p dir="ltr">That could be it, right? Since it would be only available at arrow functions(anon functions too?)<br></p>
<p dir="ltr">2015-08-11 21:42 GMT-03:00 Leonardo Wolter <<a href="mailto:leocwolter@gmail.com" target="_blank">leocwolter@gmail.com</a>>:</p>
</blockquote>
</blockquote>
<blockquote><blockquote><blockquote><p dir="ltr">Yeah., that's what I meant.<br></p>
<p dir="ltr">My proposal is not a keyword, but an hidden variable included at functions (e.g. arguments). </p>
<p dir="ltr">Does arrow functions have any limitations about that?<br></p>
<p dir="ltr">2015-08-11 21:35 GMT-03:00 Daniel Ehrenberg <<a href="mailto:dehrenberg@chromium.org" target="_blank">dehrenberg@chromium.org</a>>:</p>
</blockquote>
</blockquote>
</blockquote>
<blockquote><blockquote><blockquote><blockquote><p dir="ltr">I assume you mean more like this (without factorial):</p>
<p dir="ltr"> x.map((x) => do {<br>
        if (x <= 1) {<br>
            1;<br>
        } else {<br>
            x * recur(x - 1)<br>
        }<br>
    });</p>
<p dir="ltr">One issue is that it's hard to add keywords to JavaScript at this<br>
point. If they're not from the tiny set of remaining reserved words<br>
(enum, anyone?), they can be users' identifiers, and have to be based<br>
contextually on some enclosing syntax, like yield is.</p>
<p dir="ltr">Another downside is that then, arrow functions have a distinct and<br>
less powerful method of recursing (e.g., nested functions won't be<br>
able to see the binding to the outer one).</p>
<p dir="ltr">Dan<br></p>
<p dir="ltr">On Tue, Aug 11, 2015 at 5:30 PM, Leonardo Wolter <<a href="mailto:leocwolter@gmail.com" target="_blank">leocwolter@gmail.com</a>> wrote:<br>
> What about a clojure like recur hidden variable binded to the bottom-level<br>
> function?<br>
><br>
>  x.map(factorial(x) => do {<br>
>         if (x <= 1) {<br>
>             1;<br>
>         } else {<br>
>             x * recur(x - 1)<br>
>         }<br>
>     });<br>
><br>
> 2015-08-11 21:26 GMT-03:00 Daniel Ehrenberg <<a href="mailto:dehrenberg@chromium.org" target="_blank">dehrenberg@chromium.org</a>>:<br>
>><br>
>> In addition to being hard to parse in general, I don't think this<br>
>> would play very well with the async/await proposal<br>
>> <a href="https://tc39.github.io/ecmascript-asyncawait/" target="_blank">https://tc39.github.io/ecmascript-asyncawait/</a> , which wants to have<br>
>> arrow functions like<br>
>><br>
>> async (x) => ...<br>
>><br>
>> Because we can't count on async as a keyword, your proposal would<br>
>> create an ambiguity.<br>
>><br>
>> On Tue, Aug 11, 2015 at 1:49 PM, Jacob Parker <<a href="mailto:jacobparker1992@gmail.com" target="_blank">jacobparker1992@gmail.com</a>><br>
>> wrote:<br>
>> > I did look, but couldn’t find anything on named arrow functions were not<br>
>> > included. I do sometimes find cases where I want recursion inside a class<br>
>> > function definition, and still need access to `this`. Was it just seen as<br>
>> > syntax bloat, or were there any complications to implementing it?<br>
>> ><br>
>> > Obviously a contrived example, but something like this (using do syntax<br>
>> > too)<br>
>> ><br>
>> >     x.map(factorial(x) => do {<br>
>> >         if (x <= 1) {<br>
>> >             1;<br>
>> >         } else {<br>
>> >             x * factorial(x - 1)<br>
>> >         }<br>
>> >     });<br>
>> ><br>
>> > _______________________________________________<br>
>> > es-discuss mailing list<br>
>> > <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
>> > <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
>> _______________________________________________<br>
>> es-discuss mailing list<br>
>> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
>> <a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
><br>
><br>
</p>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
<blockquote><blockquote><blockquote><p dir="ltr"><br>
</p>
</blockquote>
</blockquote>
</blockquote>
<blockquote><blockquote><p dir="ltr"></p>
<p dir="ltr">_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</p>
</blockquote>
</blockquote>
<p dir="ltr"><br>
</p>
</blockquote></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>