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 support61151542 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,