JavaScript中"导出"和"导出默认"之间的区别?

52 javascript ecmascript-6

这两者究竟有什么区别?我见过人们使用:

function foo () {
  ...
}

export default foo;
Run Code Online (Sandbox Code Playgroud)

而且我见过:

function bar () {
  ...
}

export bar;
Run Code Online (Sandbox Code Playgroud)

另外,你为什么要使用另一个呢?

Jes*_*sse 93

最简单的方法是在CommonJS中查看三种不同的ES6导入/导出样式.

// 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';
Run Code Online (Sandbox Code Playgroud)

大致编译为:

exports.foo = foo;
exports['default'] = foo;
module.exports = foo;

var foo = require('blah').foo;
var foo = require('blah')['default'];
var foo = require('blah');
Run Code Online (Sandbox Code Playgroud)

(实际编译器输出可能不同)

  • 很棒,这真的很有帮助...。 (2认同)

san*_*ket 21

如果您需要导出多个对象,请使用命名导出(不带默认关键字).

function x1(){};
function x2(){};
export {x1},{x2};  //my-module.js
import {x1},{x2} from 'my-module';
Run Code Online (Sandbox Code Playgroud)

否则对于单个导出,默认导出效果很好

export default function x1() {};
import x1 from 'my-module';
Run Code Online (Sandbox Code Playgroud)

  • 它与`default`关键字没有任何关系 (5认同)
  • 同意@ieXcept。default关键字与多个导出无关。它被命名为vs未命名的出口。 (3认同)
  • 从技术上讲,默认值仍然是命名导出。它以“默认”名称导出。 (3认同)