export default and export {foo as default}?

# Erik Arvidsson (10 years ago)

It used to be the case that export default was just syntactic sugar for exporting something with the name "default".

export default 42;

was the same as

const x = 42;
export {x as default};

More importantly this symmetry was very useful on the import side as well as when reexporting default exports.

export {default} from './m.js'

The above line now requires a local binding.

import tmp from './m.js';
export default tmp;

I don't know why this was changed or if this was discussed anywhere?

# Erik Arvidsson (10 years ago)

I looked into it in more details and I seem to have been mistaken. "*default*" is just internal spec name that is needed for hoisting FunctionDeclaration and to create the required anonymous binding.

# Brendan Eich (10 years ago)

I recall others being confused; probably an informative note in the spec would help.

# Gary Guo (10 years ago)

In fact regarding export default foo and export {foo as default} as equivalent is current the practice of traceur.