ES6 模块与 CommonJS 模块差异

127 阅读1分钟

1. 首先是语法上的差异,一个是使用import/export语法,一个使用require/module语法。

2. ES6模块输出的是值的引用,导入模块的变量属于强绑定,导出模块的变量一旦发生变化,对应导入模块的变量也会跟随变化;commonJS模块输出的是一个值的拷贝,即commonJS一旦输出一个值,模块内部的变化影响不到这个值。

3. ES6模块化运行机制与commonJS不一样,commonJS是运行时加载,ES6是编译时输出接口。js引擎对脚本静态分析的时候(代码静态解析阶段),遇到模块加载命令import,会生成一个只读引用,等到脚本真正执行时,再根据这个只读引用到被加载的那个模块里去取值;commonJS模块就是对象,即在输入时是先加载整个模块,生成一个对象,然后再从这个对象上面读取属性和方法,这种加载称为运行时加载。

segmentfault.com/a/119000002…