export语句用于在创建JavaScript模块时,从模块中导出函数、对象或原始值,以便其他程序可以通过 import 语句使用它们。
 

此特性目前仅在 Safari 和 Chrome 原生实现。它在许多转换器中实现,如Traceur CompilerBabelRollup

语法

export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // also var
export let name1 = …, name2 = …, …, nameN; // also var, const

export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };

export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;
nameN
导出的标识符(用来被其他脚本的 import 导入)

描述

有两种不同的导出方式,每种方式对应于上述的一种语法:

  • 命名导出:
    // exports a function declared earlier
    export { myFunction }; 
    
    // exports a constant
    export const foo = Math.sqrt(2);
  • 默认导出(函数):
    export default function() {}
  • 默认导出(类):
    export default class {}

命名导出对导出多个值很有用。在导入期间,必须使用相应对象的相同名称。

但是,可以使用任何名称导入默认导出,例如:

export default k = 12; // in file test.js

import m from './test' // note that we got the freedom to use import m instead of import k, because k was default export

console.log(m);        // will log 12

只能有一个默认的导出

以下语法不会导出已导入模块中的默认导出:

export * from …;

如果需要导出默认值,请使用下列代码:

import mod from "mod";
export default mod;

示例

使用命名导出

在模块中,我们可以使用以下代码:

// module "my-module.js"
export function cube(x) {
  return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
export { cube,foo };

这样的话,在其它脚本 (比如import),我们可以这样使用:

import { cube, foo } from 'my-module.js';
console.log(cube(3)); // 27
console.log(foo);    // 4.555806215962888

使用默认导出

如果我们要导出一个值或模块中的返回值,就可以使用默认导出:

// module "my-module.js"
export default function cube(x) {
  return x * x * x;
}

然后,在另一个脚本中,可以直接导入默认导出:

// module "my-module.js"
import cube from 'my-module';
console.log(cube(3)); // 27​​​​​

注意,不能使用varletconst作为默认导出

规范

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Exports
Standard Initial definition.
ECMAScript Latest Draft (ECMA-262)
Exports
Living Standard  

浏览器兼容

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support61

16

151

542 No4710.1
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support No61 Yes542 No4710.1

1. From version 15: this feature is behind the Experimental JavaScript Features preference.

2. From version 54: this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.

参见

文档标签和贡献者

 最后编辑者: TimmyKingFree,