Allow arrow functions with conventional 'function' declarations
# Michael J. Ryan (7 years ago)
While I appreciate your sentiment, and often relied on housing myself. These days I'd be inclined to continue with the classic funny definition and hosting, or more likely to break it into a separate, testable module.
Not to be contain.
While I appreciate your sentiment, and often relied on housing myself. These days I'd be inclined to continue with the classic funny definition and hosting, or more likely to break it into a separate, testable module. Not to be contain. On Thu, Mar 29, 2018, 02:31 Michael Luder-Rosefield <rosyatrandom at gmail.com> wrote: > You're probably asking what on Earth the point of this is, and I'll tell > you: _hoisting_. > > My preferred ES5 code style was always to declare functions after their > use: > > ``` > doSomething1(); > doSomething2(); > > function doSomething1 () { > // ... > } > > function doSomething2 () { > // ... > } > > It keeps things uncluttered and readable: you don't have to read through > random functions before they are used, and have to work out what they're > doing there. > > If you're able to make use of ES6 arrow functions declared with > `const`/`let`, though, you would have to declare them before use. This > obviously goes against my preferred style, and can also result in > inconsistent placing of function declarations when mixed with conventional > functions. > > My proposal is simple: after the initial `function name (params)`, allow > the following forms: > 1. { // body code } > 2. => { // body code } > 3. => // expression ; > > 1. is of course the current form > 2. is similar, except it's a block body arrow function (all the usual > arrow function differences apply; this binding, cannot be used with 'new', > no 'arguments', no 'super'...) > 3. allows for concise body arrow functions - semi-colon at end. > > Example: > > ``` > // with proposal > doSomething1(); > doSomething2() > .then(doSomething3); > > function doSomething1 () { > // conventional function > } > > function doSomething2 () => { > // block body arrow function > } > > function doSomething3 (value) => value ? foo(value) : bar(); > > // without proposal > const doSomething2 = () => { > // block body arrow function > }; > doSomething3 = value => value ? foo(value) : bar(); > > doSomething1(); > doSomething2() > .then(doSomething3); > > function doSomething1 () { > // conventional function > } > ``` > As you can see, the latter code is just... messy and unpleasant. > > I don't think there's any potential issues in regards to interpreting > syntax (it just requires a simple check for an arrow after the parameters), > nor with readability. Async We would definitely need to clarify behaviour > with `async` and generator functions, though. > _______________________________________________ > 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/20180329/6a30a4b8/attachment.html>
You're probably asking what on Earth the point of this is, and I'll tell you: hoisting.
My preferred ES5 code style was always to declare functions after their use:
// with proposal doSomething1(); doSomething2() .then(doSomething3);
function doSomething1 () { // conventional function }
function doSomething2 () => { // block body arrow function }
function doSomething3 (value) => value ? foo(value) : bar();
// without proposal const doSomething2 = () => { // block body arrow function }; doSomething3 = value => value ? foo(value) : bar();
doSomething1(); doSomething2() .then(doSomething3);
function doSomething1 () { // conventional function }