And as Kevin said, it has been mentioned before (with event handlers and timeouts as the initial driving force).
https://esdiscuss.org/topic/self-recursion-and-arrow-functions On Tue, Aug 11, 2015, 21:57 Isiah Meadows <[email protected]> wrote: > Sent this too early... Corrected inline. > > On Tue, Aug 11, 2015, 21:56 Isiah Meadows <[email protected]> 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 <[email protected]> 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 <[email protected]>: > > 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 <[email protected]>: > > 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 <[email protected]> > 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 <[email protected]>: > >> > >> 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 < > [email protected]> > >> 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 > >> > [email protected] > >> > https://mail.mozilla.org/listinfo/es-discuss > >> _______________________________________________ > >> es-discuss mailing list > >> [email protected] > >> https://mail.mozilla.org/listinfo/es-discuss > > > > > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > > >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

