1.module
ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。ES6 模块不是对象,而是通过export
命令显式指定输出的代码,再通过import
命令输入。
除了静态加载带来的各种好处,ES6 模块还有以下好处。
- 不再需要
UMD
模块格式了,将来服务器和浏览器都会支持 ES6 模块格式。目前,通过各种工具库,其实已经做到了这一点。 - 将来浏览器的新 API 就能用模块格式提供,不再必须做成全局变量或者
navigator
对象的属性。 - 不再需要对象作为命名空间(比如
Math
对象),未来这些功能可以通过模块提供。
ES6 模块之中,顶层的this
指向undefined
,即不应该在顶层代码使用this
。
2.commonjs
CommonJS 和 AMD 模块,都只能在运行时确定这些东西。CommonJS 模块就是对象,输入时必须查找对象属性。