CommonJs和ES6的模块加载的区别
在CommonJs中,通过exports
或module.exports
来导出模块中的内容,通过require
来导入
在ES6中,通过export
或export default
来导出模块中的内容,通过import
来导入
他们的主要区别有:
CommonJS中,对于导入的数据,如果是原始类型的数据,是进行了复制,对其进行更改不会影响到被导入模块中的数据;而引用数据类型的数据,只是进行了浅拷贝,对其进行更改会影响到被导入模块中的数据;
CommonJS中,在导入模块时,就整个执行了代码;
CommonJS中,在同模块中多次导入,只会执行一次代码,后面的都是使用缓存,除非清了缓存;
CommonJS中,循环模块加载时,只会输出已执行的部分,未执行的不会被输出
ES6中,属于【动态只读引用】;
动态是指,当原始值发生变化时,import的数据也会改变。无论什么数据类型;
只读是指,import的数据不可更改,import时只是生成一个对原始值的只读引用,当执行到时,才去被加载的模块中取值;
在循环加载中,只要两个模块中存在某种引用,模块就会被执行。