issues
search
yaoningvital
/
blog
my blog
31
stars
4
forks
source link
ES6模块与CommonJS模块的差异
#172
Open
yaoningvital
opened
4 years ago
yaoningvital
commented
4 years ago
ES6模块与CommonJS模块完全不同。
CommonJS模块
ES6模块
模块输出的是
CommonJS模块输出的是一个
值的拷贝
ES6模块输出的是
值的引用
在什么阶段加载模块
运行时
加载
编译时
输出接口
模块顶层的 this 指向
CommonJS 模块的顶层
this
指向当前模块
ES6 模块之中,顶层的
this
指向
undefined
内部变量
ES6模块应该是通用的,同一个模块不用修改,就可以用在浏览器环境和服务器环境。为了达到这个目标,Node规定ES6模块之中不能使用CommonJS模块的特有的一些内部变量。
以下这些顶层变量在ES6模块之中都是不存在的。
- arguments
- require
- module
- exports
-
filename
-
dirname
模块的加载原理
CommonJS 模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就到缓存中取值,返回第一次运行的结果,除非手动清除系统缓存。
ES6模块是动态引用。如果使用
import
命令从一个模块加载变量,那些变量不会被缓存,而是成为一个指向被加载模块的引用。
ES6模块与CommonJS模块完全不同。
this
指向当前模块this
指向undefined
以下这些顶层变量在ES6模块之中都是不存在的。
- arguments
- require
- module
- exports
- filename
- dirname
import
命令从一个模块加载变量,那些变量不会被缓存,而是成为一个指向被加载模块的引用。