Glen Huang wrote:
And after reading both of your responses, my question actually becomes: is it correct that there is not way to rebind the value being exported via the “export default” declaration, unless you use something like "export { a as default };"
I think that's right. Or by brute-force reflection on the module object, to hack the property named 'default' in it.
Does it also mean that: ```js export default function a() {} a = 2; ``` The assignment "a = 2” will result in an error, since "function a() {}” is an expression, so “a” was never defined at that point?
In strict code, unless there was already an 'a' binding in scope, that would indeed be a runtime error. Modules are strict by definition.
From esthetic point of view, “a" being not bound in the previous snippet really surprises me, considering its “twin" version: ```js export function a() {} a = 2;
Yup, wherefore Dave's original syntax design interposing an '=' before the 'function a() {}' to make clear the latter is an expression.
It's a pity the '=' isn't required. Maybe it can be an ES7 optional syntax extension, but at that point we'd regret not requiring it -- so either ES6 should be revised ASAP to require it, or we should drop the idea and learn to live with the unclear expression context.
If I understand the spec correctly, this should cause the “a” export in the binding be 2.
Yes, just like in any other JS scope, function declarations make writable bindings.
/be _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss