<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">With the help of your explanation, the spec becomes much easier to read. Thanks.<div class=""><br class=""></div><div class="">Would you consider adding this:</div><div class=""><br class=""></div><div class="">Syntax</div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span>export default var VariableDeclaration;</div><div class=""><br class=""></div><div class="">ExportEntries</div><div class=""><div class=""><ol class=""><li class="">Let entries be a new empty List.</li><li class="">Let name be the BoundNames of VariableDeclaration.</li><li class="">Repeat for each name in names,</li><li class="">Append to entries the Record {[[ModuleRequest]]: null, [[ImportName]]: null, [[LocalName]]:name, [[ExportName]]: ‚Äúdefault" }.</li><li class="">Return entries.</li></ol></div></div><div class="">Vice versa for LexicalDeclaration.</div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Dec 16, 2014, at 3:20 PM, Allen Wirfs-Brock <<a href="mailto:allen@wirfs-brock.com" class="">allen@wirfs-brock.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; " class=""><br class=""><div class=""><div class="">On Dec 15, 2014, at 10:06 PM, Brendan Eich wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite" class=""><div class="">Ah, thanks -- I remember someone pointing this out, now that you mention it.<br class=""><br class="">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.<br class=""><br class="">One more question below:<br class=""><br class="">Allen Wirfs-Brock wrote:<br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">This seems clear. As Dave said, he originally proposed an '=' in between 'default' and the *expression* to evaluate on the right. That design remembrance should make clear that the default export is a function expression (not function declaration) with 'a' the name only in the scope of that function (either for recursion or as a downward funarg).<br class=""></blockquote></blockquote><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote><blockquote type="cite" class=""><blockquote type="cite" class="">The 'default' binding won't be mutated via the final 'a = 2' statement, so the default-exported value is still the result of evaluating the function a(){} expression.<br class=""></blockquote></blockquote><blockquote type="cite" class=""><br class=""></blockquote><blockquote type="cite" class="">Not quite how it actually ended up.  See <a href="https://bugs.ecmascript.org/show_bug.cgi?id=2302" class="">https://bugs.ecmascript.org/show_bug.cgi?id=2302</a> for background.<br class=""></blockquote><blockquote type="cite" class=""><br class=""></blockquote><blockquote type="cite" class="">export default function ...<br class=""></blockquote><blockquote type="cite" class="">export default function  * ...<br class=""></blockquote><blockquote type="cite" class="">export default class ...<br class=""></blockquote><blockquote type="cite" class=""><br class=""></blockquote><blockquote type="cite" 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.<br class=""></blockquote><br class="">So assigning `a = 2` won't affect the value of the default export, but will rebind `a`, given preceding `export default function a() {}` -- right?<br class=""></div></blockquote><div class=""><br class=""></div><div class="">It does both.  'a' is rebound to 2 and since the export name 'default' associates to 'a', any subsequent references in other modules tht are linked to the default export of this module will also see 2 because 'default' is really just the export name for 'a'.</div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><br class=""><blockquote type="cite" class="">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.<br class=""></blockquote><br class="">Hmm, how's that work? Throwaway symbol name?<br class=""></div></blockquote><div class="">Well ultimately it's all linkages that at the implementation level hopefully resolve external (ie imported) references into direct references to exported variable binding.</div><div class=""><br class=""></div><div class="">At the spec. level, I just define a non-identifer name ("*default*") to the binding created by a anonymous 'export default'.  There can only be one per modules. It turns out all the declaration instantiation, binding lookup,  and module linking mechanism in the spec. work fine with such a name, so there is actually very few special cases in the spec. for such anonymous default exports. See <a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-exports-static-semantics-exportentries" class="">https://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-exports-static-semantics-exportentries</a> for how exports associate an export name with either a local binding name or an import name from some other module.</div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><br class="">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).<br class=""></div></blockquote><div class=""><br class=""></div><div class="">Right, Module Record is just internal spec. mechanism used to define the module semantics.  It currently isn't reified.</div><div class=""><br class=""></div><div class="">Allen</div></div><br class=""></div>_______________________________________________<br class="">es-discuss mailing list<br class=""><a href="mailto:es-discuss@mozilla.org" class="">es-discuss@mozilla.org</a><br class="">https://mail.mozilla.org/listinfo/es-discuss<br class=""></div></blockquote></div><br class=""></div></body></html>