概述
- CommonJS 是服务器模块加载规范,AMD 是浏览器模块加载规范
- 前者,nodejs中
require
和module.exports
- 后者,requireJS中
require
和defined
- ES6 可以成为服务器和浏览器通用的模块加载方案
-
import {...} from ...
和export
严格模式
模块自动应用严格模式
- 变量必须先声明后使用
- 不能使用
fn.caller
和fn.callee
- 不能对
eval
和arguments
重新赋值 - 不能使用
delete
删除变量,只能用来删除对象属性 - 不能使用前缀
0
表示八进制 - 禁止
this
指向全局对象 - 添加保留字
static
,protected
,interface
export
动态绑定
- 可以输出变量声明语句,函数定义等,不能直接输出值
-
export
是和变量动态绑定,CommonJS 输出值的缓存 -
as
可以重命名,那么一个变量就可以输出多次
// 正确方法
export var a =1
export function fn() {}
// 错误方式
var a = 1
export a
function fn() {}
export fn
// 错误方式改变后
var a = 1
export {a}
function fn() {}
export {fn}
export default 默认输出
其实相当于输入一个
default
的变量,之后跟的值赋值给变量。在导出的时候,允许import
使用任何变量承接
- 导出变量的时候,
export
和export default
情况刚好相反 - 导出函数的时候,
export default
可以导出匿名函数和函数定义 - 在导入的时候,也稍有不同,不在使用
{}
// export 会报错的,export default 不会报错
var a = 1
export default a
// export default 报错
export default var a = 1
import 命令
静态执行
-
import
命令是在编译阶段执行的,因此先使用后引入是可以的。但是不能使用表达式和变量。 -
import
引入中的方法名必须和export
导出的方法名一致 - 可以使用
as
重命名
整体加载
import * as all from ''
- 关键字
*
和as
- 不允许运行时改变
-
wrong,
all.foo = 'bar'
import 和 export 复合写法
作为了解,不深入
- 有些形式是不可以复合写的
export {foo,bar} from ""
模块的继承
- 形式
export * from ''
- 其实相当于复合写法,先从文件中导入所有变量和方法,再全部导出
- 这种形式会自动忽略文件中的
export default
跨模块常量
- 常量使用
const
- 其他形式和普通的模块相同,在需要使用的模块中引入即可