定义一个模块

在 ECMAScript 6 中,当使用模块语法(import / export)时,每个文件都成为具有私有名称空间的自己的模块。顶级函数和变量不会污染全局命名空间。要公开要导入的其他模块的函数,类和变量,可以使用 export 关键字。

// not exported
function somethingPrivate() {
    console.log('TOP SECRET')
}

export const PI = 3.14;

export function doSomething() {
    console.log('Hello from a module!')
}

function doSomethingElse(){ 
    console.log("Something else")
}

export {doSomethingElse}

export class MyClass {
    test() {}
}

注意:不使用 import / export 时,通过 <script> 标签加载的 ES5 JavaScript 文件将保持不变。

只有显式导出的值才可在模块外部使用。其他一切都可以被视为私人或无法进入。

导入此模块将产生(假设前面的代码块在 my-module.js 中):

import * as myModule from './my-module.js';

myModule.PI;                 // 3.14
myModule.doSomething();      // 'Hello from a module!'
myModule.doSomethingElse();  // 'Something else'
new myModule.MyClass();      // an instance of MyClass
myModule.somethingPrivate(); // This would fail since somethingPrivate was not exported