module引入了模块作用域
特点:
- 目前(2016/1/31)没有浏览器支持es6模块(可能这样的模块加载机制不适合浏览器环境),利用webpack等工具可以把import的所有内容整合到一个文件中
- 支持引入/导出时重命名,import/export {api as newApi},引入时重命名主要解决命名冲突,导出时重命名可以实现别名($和jQuery)
- 支持默认导入/导出,能够导入CommonJS和AMD模块
- 只可以在模块的最外层作用域使用import/export,且不能再条件语句中使用
import {api1, api2...} from 'xxx.js'语法
特点:
- 支持api部分引入(不引入不需要的功能接口,当然,xxx.js是完整加载的)
- 如果xxx.js还有import语句,会深度优先加载执行
- 已执行模块会被忽略,避免形成循环引用
- 支持默认导入,用来支持导入CommonJS和AMD包(default就是export对象),import api from 'xxx.js'等价于import {default as api} from 'xxx.js'
- 支持导入模块对象,import * as apis from 'xxx.js',*表示xxx.js中export的所有接口,把xxx.js中导出的所有东西整合到apis对象中,通过apis.xx调用
export {api1, api2...}语法
特点:
- 不需要在首行声明,可以在模块内外层作用域任何位置export
- 可以声明多个export,但要保证api名称无重复
- export可嵌套,同样要保证api名称唯一
- export重复内容可能会引发错误
- 支持默认导出,export default api或者export {api as default}
- 支持聚合导出,export {api1, api2...} from 'xxx.js'等价于import + export,但export from不会在当前模块作用域引入各个api变量(导入后直接导出,无法引用)
- export导出的api列表必须是字面量形式,不能遍历数组导出数组元素