1、概述
JS中一直没有 module 体系,无法将一个大程序拆分成依赖的小文件,在用简单的方法拼接起来。ES6 的模块设计思想是尽量静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。
ES6模块不是对象,而是通过 export 命令显式指定输出的代码,再通过import 命令输入。
2、严格模式
ES6的模块自动采用严格模式,不管你有没有再模块头部加上 「use strict」。
变量必须声明再使用
函数的参数不能有同名属性,否则报错
不能使用with语句
不能对只读属性赋值,否则报错
不能删除不可删除的属性,否则报错
不能删除变量 delete prop,会报错,只能删除属性delete global[prop]
eval不会在它的外层作用域引入变量
eval和arguments不能被重新赋值
arguments不会自动反应函数的变化
不能使用 arguments.callee
不能使用 arguments.caller
禁止 this 指向全局对象(顶层指向 undefined,所以不能在顶层代码中使用 this)
不能使用 fn.caller 和 fn.arguments获取调用的堆栈
增加了保留字段(如:protected、static、interface)
3、export命令
模块功能主要由两个命令构成:export 和 import。export 命令用于规定模块的对外接口,import 命令用于输入其他模块提供的功能。
另外一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望能够再外部读取某个模块内部的变量,那么就需要使用 export 输出该变量。
export 规定的是对外的接口,必须与模块内部的变量建立一一对应关系。
export 命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域中就会报错。
4、import命令
使用了export 输出模块定义的接口之后可以使用 import 加载这个模块。
import 输入的变量都是只读的,因为它的本质是输入接口。也就是说,不允许在加载模块的脚本里改写接口。
5、模块的整体加载
除了指定加载某个输出值,还可以使用整体加载,即用 星号 (*)指定对象,所有输出值都加载在这个对象上面。
6、export default
在上面可以看出,使用 import 命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。如果想快速的加载模块,在这里可以使用 export default, 为模块指定默认输出。
export default 命令用于指定模块的默认输出。显然,一个模块只能有一个默认输出。因此 export default 命令只能使用一次。所以 import引入的时候 方法名才不需要加括号。
7、export 与 import 的复合写法
如果在一个模块中,先输入后输出同一个模块。 |
|