基础

模块思想,尽量静态化的设计使得编译时就能确定模块的依赖关系,以及输入输出的变量。

CommonJS和AMD模块都只能运行时加载,无法在编译时做静态优化;ES6模块是编译时加载,使得静态分析成为可能。

ES6模块本身不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入;

严格模式

ES6模块自动采用严格模式;顶层this指向undefined而不是全局对象。

export命令

是模块的对外接口,可以在任何位置,但必须在模块的顶层作用域;使用规则:

export var v1 = 1;
export var v2 = 2;

// or 
var v1 = 1;
var v2 = 2;
export {v1, v2};

// or rename them
var v1 = 1;
var v2 = 2;
export {v1 as value1, v2 as value2};

输出函数或类:

function f1() {...};
export {f1}
// or 
export function f1() {...};
// or rename
export {f1 as func1};

import命令

用于在一个文件或模块引用另一个模块或其输出的变量/对象等。也必须用在模块的顶层作用域。

语法:

import {v1, v2} from './profile.js';
// or rename
import {v1 as value1, v2 as value2} from './profile.js';

import语句会提升。因为静态执行,不能使用变量、表达式等需要运行时才能得到值的语法,也不能用在if结构中。

模块的整体加载

// 只加载模块而不输入任何值
import 'Lodash';  

export default

在一个模块中使用export default输出的值,可以在其他模块引入时直接重命名且不需用大括号。默认输出值在一个模块中最多只能有一个。其后不能跟变量声明语句。

// in other module 'example.js'
export default function() {
    // some code
};

// in this module to import it
import func1 from './path/example.js';

export与import复合写法

export {v1, v2} from './path/example.js'
// equals to
import {v1, v2} from './path/example.js'
export {v1, v2}

模块继承

在一个模块中通过通配符引入另一个模块的所有公开变量(不包括export default的输出值);

export * from 'example.js';
export var v3 = 3;

跨模块常量

使用const声明变量,与普通变量的输入、输出规则相似;

import()

该函数是import命令的动态版;


 posted on 2018-06-20 09:39  木汀  阅读(113)  评论(0编辑  收藏  举报