commonJS和es6模块的区别

一、commonjs

a、commonjs是值的一个浅拷贝,对于基本数据类型而言 引用的文件修改源文件里面的基本数据类型值是不改变源文件里面的数据,但是对于复杂类型来说就会改变

b、commonjs是在代码运行是进行导入导出的

c、commonjs是运行时加载时同步的

d、commonjs同一个文件只要被引用一次   后面在被其他文件引用时就不会在执行该模块而是从缓存里面取

e、循环加载时,属于加载时执行。即脚本代码在require的时候,就会全部执行。一旦出现某个模块被"循环加载",就只输出已经执行的部分,还未执行的部分不会输出。

f、require导出一个对象(module.exports)

// a.js
var count = 1;
function addCount() {
  count++;
}
module.exports = {
  count,
  addCount,
};

// b.js
console.log(mod.count);   // 1
mod.addCount();
console.log(mod.count);  // 1

如果想要实时的就需要一个getter了 

// a.js
var count = 1;
function addCount() {
  count++;
}
module.exports = {
  get count() {
    return count
},
  addCount,
};

// b.js
console.log(mod.count);   // 1
mod.addCount();
console.log(mod.count);  // 2

对于复杂类型而言

// a.js
var count = {
  name: "zhangsan",
};
function addCount() {
  count.name = "wanger";
}
module.exports = {
  count,
  addCount,
};


// b.js
let mod = require("./c.js");
console.log(mod.count.name); // zhangsan
mod.count.name = "lisi";
console.log(mod.count.name); // lisi
mod.addCount();
console.log(mod.count.name); // wanger

在被循环引用时 

// 1.js
exports.a = 1;
let aa = require("./2.js");
console.log("a");


// 2.js
exports.b = 1;
let bb = require("./1.js");
console.log("b");

// 3.js
require("./1.js");
require("./2.js");


node 3.js
b
a

 

二、es6模块

a、es6的是指针的指向引用,当模块遇到import命令时,就会生成一个只读引用。等到脚本真正执行时,再根据这个只读引用,到被加载的那个模块里面去取值

b、es6是只读不改的

c、es6模块在编译时加载时异步

d、对于动态来说,原始值发生变化,import加载的值也会发生变化。不论是基本数据类型还是复杂数据类型。

e、es6只加载使用导的部分代码而不是全部文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值