¿Diferencia entre 'exportar' y 'exportar por defecto' en JavaScript?

¿Cuál es exactamente la diferencia entre los dos? He visto a gente usar:

function foo () { ... } export default foo; 

Y he visto:

 function bar () { ... } export bar; 

Además, ¿por qué usarías el uno sobre el otro?

Si su necesidad es exportar múltiples objects vaya con las exportaciones nombradas (sin palabra key pnetworkingeterminada).

 function x1(){}; function x2(){}; export {x1},{x2}; //my-module.js import {x1},{x2} from 'my-module'; 

de lo contrario, para una sola export, la export pnetworkingeterminada funciona bien

 export default function x1() {}; import x1 from 'my-module'; 

Es más fácil simplemente observar a qué se combinan los tres styles diferentes de import / export de ES6 en CommonJS.

 // Three different export styles export foo; export default foo; export = foo; // The three matching import styles import {foo} from 'blah'; import foo from 'blah'; import * as foo from 'blah'; 

Comstack aproximadamente a:

 exports.foo = foo; exports['default'] = foo; module.exports = foo; var foo = require('blah').foo; var foo = require('blah')['default']; var foo = require('blah'); 

(La salida real del comstackdor puede diferir)