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命令从一个模块加载变量,那些变量不会被缓存,而是成为一个指向被加载模块的引用。