export 语句 用于从给定的文件 (或模块) 中导出函数,对象或原语。
注意: 此功能目前无法在任何浏览器中实现。它在许多转换器中实现,例如 Traceur Compiler, Babel or Rollup.
语法
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导入)
描述
有两种不同的导出方式,每种方式对应于上述的一种语法:
- 命名导出:
export { myFunction }; // 导出一个函数声明 export const foo = Math.sqrt(2); // 导出一个常量 - 默认导出 (每个脚本只能有一个):
export default myFunctionOrClass // 或者 'export default class {}' // 这里没有分号
对于只导出一部分值来说,命名导出的方式很有用。在导入时候,可以使用相同的名称来引用对应导出的值。
关于默认导出方式,每个模块只有一个默认导出。一个默认导出可以是一个函数,一个类,一个对象等。当最简单导入的时候,这个值是将被认为是”入口”导出值。
示例
命名导出
在这个模块里,我们可以这么导出:
// module "my-module.js"
export function cube(x) {
return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
export { foo };
这样的话,在其它脚本 (cf. 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
规范
| Specification | Status | Comment |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Exports |
Standard | Initial definition. |
| ECMAScript Latest Draft (ECMA-262) Exports |
Living Standard |
浏览器支持
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 未实现 | 未实现 (Netscape 4 until Firefox 3.5) |
未实现 | 未实现 | 未实现 |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | 未实现 | 未实现 | 未实现 | 未实现 | 未实现 | 未实现 |
参见
import- ES6 in Depth: Modules, Hacks blog post by Jason Orendorff
- Axel Rauschmayer's book: "Exploring JS: Modules"