- ES6模块不是对象,而是通过export命令显式指定输出的代码,输入时也采用静态命令的形式。
- ES6的模块自动采用严格模式
- export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
关于export
- 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用 export 关键字输出该变量。
- export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错
- 一个模块只能有一个默认输出,因此export default命令只能使用一次
- export * 命令会忽略模块的default方法
关于import
- import命令具有提升效果,会提升到整个模块的头部
- import后面的from指定模块文件的位置,可以是相对路径,也可以是绝对路径,.js路径可以省略。如果只是模块名,不带有路径,那么必须有配置文件,告诉 JavaScript 引擎该模块的位置。
- import是静态执行,也是编译前执行的,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构。
- 多次执行同一个import的话,只会执行一次
- import 不能导入*,要用as改名
复合写法
如果在一个模块之中,先输入后输出同一个模块,import语句可以与export语句写在一起。
模块继承
跨模块常量
const声明的常量只在当前代码块有效。如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法。
如果要使用的常量非常多,可以建一个专门的constants目录,将各种常量写在不同的文件里面,保存在该目录下。
需要注意的是,单纯es6语法并不能很简单的测试,需要使用babel-node这样的支持完全的es6语法的解析器才能解析