• CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
      • 所谓值的拷贝,原始类型的值被缓存,不随模块内部的改变而改变。
      • ES6 模块是静态引用,不缓存值,模块内外是绑定的,而且是只读引用,不能修改值。
      • commonjs是动态引入,执行时引入,可以放到语句中执行require()
    • CommonJS 模块是运行时加载, ES6 模块是编译时加载输出接口。
      • 运行时加载: CommonJS 模块就是对象;是先加载整个模块,生成一个对象,然后再从这个 对象上面读取方法,这种加载称为“运行时加载”。
      • 编译时加载: ES6模块不是对象,而是通过 export 命令「显式指定输出的代码」。 import 时采用静态命令的形式,即在 import 指定「加载某个输出值」,而「不是加载整个 模块」,这种加载称为“编译时加载”
    • CommonJs 导入的模块路径可以是一个表达式,因为它使用的是 require() 方法;而ES6Modules只能是字符串
    • CommonJS this 指向当前模块, ES6 Modules this 指向 undefined
    • CommonJS 具有缓存,ESModule没有缓存