这两个模块有两个重大差异:

1.CommonJS模块输出的是一个值得拷贝,ES6模块输出的是值得引用;

2.CommonJS模块是运行时加载,ES6模块是代码编译时输出接口,

(先来说说什么是编译时和运行时,笼统的来讲就是,编译时代码还没有提交到内存中去运行起来,还在硬盘当中保存,属于静态定义(编译器对你写的代码进行语法检查等一系列操作);

运行时就是代码经过编译,没有发现问题,提交到内存中去跑起来了,属于动态定义。)

它们的第一个差异,commonJs模块输出的是值得拷贝,也就是说,一旦输出一个值,模块内的变化不会影响到这个值,ES6模块的运行机制与commonJS不一样,js引擎对脚本静态分析的时候,遇到模块加载命令import,就会生成一个只读引用,等到脚本真正运行时,在根据这个只读引用,到被加载的那个模块中去取值;

它们的第二个差异是因为commonJS加载的是一个对象(即module.exports属性),该对象只有在脚本运行时才会完成,而ES6模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。

posted on 2017-08-21 17:57  奶油小子  阅读(260)  评论(0)    收藏  举报