在创建JavaScript模块时,export 语句用于从模块中导出实时绑定的函数、对象或原始值,以便其他程序可以通过 import 语句使用它们。被导出的绑定值依然可以在本地进行修改。在使用import进行导入时,这些绑定值只能被导入模块所读取,但在export导出模块中对这些绑定值进行修改,所修改的值也会实时地更新。
无论是否声明,导出的模块都处于严格模式

存在两种 exports 导出方式:

  1. 命名导出(每个模块包含任意数量)
  2. 默认导出(每个模块包含一个)
    1. // 导出单个特性
    2. export let name1, name2, …, nameN; // also var, const
    3. export let name1 = …, name2 = …, …, nameN; // also var, const
    4. export function FunctionName(){...}
    5. export class ClassName {...}
    6. // 导出列表(与上面等同)
    7. export { name1, name2, …, nameN };
    8. // 重命名导出
    9. export { variable1 as name1, variable2 as name2, …, nameN };
    10. // 解构导出并重命名
    11. export const { name1, name2: bar } = o;
    12. // 默认导出
    13. export default expression;
    14. export default function (…) { } // also class, function*
    15. export default function name1(…) { } // also class, function*
    16. export { name1 as default, };
    17. // 导出模块合集
    18. export * from …; // does not set the default export
    19. export * as name1 from …; // Draft ECMAScript® 2O21
    20. export { name1, name2, …, nameN } from …;
    21. export { import1 as name1, import2 as name2, …, nameN } from …;
    22. export { default } from …;

    模块重定向

  • childModule1.js: 导出 myFunction 和 myVariable
  • childModule2.js: 导出 myClass
  • parentModule.js: 作为聚合器(不做其他事情)
  • 顶层模块:调用 parentModule.js 的导出项 ```javascript // childModule1.js 中 let myFunction = …; // assign something useful to myFunction let myVariable = …; // assign something useful to myVariable export {myFunction, myVariable};

// childModule2.js 中 let myClass = …; // assign something useful to myClass export myClass;

// parentModule.js 中 // 仅仅聚合 childModule1 和 childModule2 中的导出 // 以重新导出他们 export { myFunction, myVariable } from ‘childModule1.js’; export { myClass } from ‘childModule2.js’; //myFunction、myVariable 和 myClass 在当前模块会变得不可用

// 顶层模块中 // 我们可以从单个模块调用所有导出,因为 parentModule 事先 // 已经将他们“收集”/“打包”到一起 import { myFunction, myVariable, myClass } from ‘parentModule.js’ ```