概述
- 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 - 其他形式和普通的模块相同,在需要使用的模块中引入即可
