0%

1201-commonjs和ESmodule

ES Module和CommonJS的区别

1、ES module 属于编译时加载,在编译的时候就能确定模块之间的关系;而CommonJS属于运行时加载,采用ES module的好处是可以做到tree sharking。ES module无法做到运行时加载,因此提出了import( )函数,完成运行时加载,和require( )的区别是,import( )是异步执行的,而require( )是同步执行的。

2、ES module可以加载到模块的部分内容,而CommonJS需要加载整个文件,然后在拿到其中的内容。

3、ES module输出的是值得引用,而CommonJS输出的是值的拷贝。

CMD和AMD的区别

在定义模块时,对依赖的处理不同:AMD推崇依赖前置,在定义模块的时候要声明其依赖的模块;而CMD推崇就近依赖,只有在用到某个模块时才会进行require( )

对依赖模块执行时机的处理不同:AMD在依赖模块加载完成后直接执行依赖模块,依赖的执行顺序和属性顺序不一定一致。CMD在依赖模块加载完成后并不执行,只是下载。等到所有的依赖模块都加载好之后,进入回调的函数逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序就和我们书写的顺序保持一致了。