Skip to content

Latest commit

 

History

History
28 lines (18 loc) · 1.11 KB

CommonJs与ES6模块的差异.md

File metadata and controls

28 lines (18 loc) · 1.11 KB

1. CommonJs 与 ES6 模块的差异

CommonJs 加载的模块是对模块的一个拷贝,它会被 require 操作缓存,当再次 require 该模块时,会从缓存中的 exports 直接取值。值为加载时执行。

ES6 加载的模块是对模块的一个引用,它不会被 import 操作缓存,当多次 import 同一个模块时,产生的是同一个引用。值为动态引用。

require 操作缓存的对象类似如下,下次 require 直接从 exports 接口中取

{
 id: '...',
 exports: { ... },
 loaded: true,
 ...
}

2. CommonJs 与 ES6 循环加载处理的差异

与上述两者加载方式的差异相关

由于 CommonJs 值为执行时加载,且再次 require 会从缓存中的 exports 取值,因此在产生循环引用的时候,可能执行到的时机并非是模块完整的输出值。

而 ES6 由于是动态引用,则问题是在于当被执行到需要引用求值的时候可能会产生引用不存在的错误。

第二节差异与第四节循环引用 http://es6.ruanyifeng.com/?search=blob&x=0&y=0#docs/module-loader