Brendan Eich (2014-12-16T06:06:11.000Z)
d at domenic.me (2015-01-05T20:31:38.392Z)
Ah, thanks -- I remember someone pointing this out, now that you mention it. My misunderstanding in the last two posts dings my ES6 quiz score! Who will get a perfect score in a fresh (uncoached) quiz setting? Is this telling us something? Anyway, I agree that `export default function a() {}` making an `a` binding is better, it resolves the confusing aspect in my misunderstood version of ES6 that Glen cited in his 7pm post. One more question below: Allen Wirfs-Brock wrote: > Not quite how it actually ended up. See > https://bugs.ecmascript.org/show_bug.cgi?id=2302 for background. > > ```js > export default function ... > export default function * ... > export default class ... > ``` > > all act as declaration that create a module local binding (for the > name in the declaration part) that is initialized in the normal > manner (hoisted for function/function*, statement order > initialization for class). In addition that binding is exported using > the reserved export name 'default'. Just like, an export of the same > declaration without 'default', except such declaration use the same > name for both the export name and the local binding name. So assigning `a = 2` won't affect the value of the default export, but will rebind `a`, given preceding `export default function a() {}` -- right? > For export default, if the declaration is anonymous (this required > some minor syntax tweaking) , a local binding is still created (and > initialized in the manner manner) but the local binding isn't locally > referencable because it doesn't have a name that can be referenced via > an IdentifierReference. Hmm, how's that work? Throwaway symbol name? I ask because Glen also wondered about the Module Record being reified in one of his posts. That's spec-internal, though (again, correction welcome). > If you want to export the value of a named > FunctionExpression/GeneratorExpression (or ClassExpression) you need > to parenthesize to force it to be an expression rather than a > declaration, such as: > export default (function fact(n) {...}); Right-o, this is what jogged my memory, first sentence above.