在commonJS中,我们的exports和module.exports有一些相同之处。
首先写法上
//aaa.js
module.exports.a = "a";
module.exports.b = "b";
//bbb.js
exports.c = "c";
exports.d = "d";
能起到相同的效果,对于
//ccc.js
const A = require("./aaa.js")
const B = require("./bbb.js")
console.log("a", A.a)//a a
console.log("b", A.b)//b b
console.log("c", B.c)//c c
console.log("d", B.d)//d d
解释,下图所示,require取得的是module中的exports中的地址,是一个引用赋值
此时
console.log(module.exports === exports)//true
module.exports和exports区别
exports其实是module.exports的一个引用,类似于指针,本质上module.exports才是真正的对象
当我们使用
exports = {
a,
b
}
的时候,我们从内存中新开辟了一块新的地址空间,使得我们的module中的exports和exports断开,不相等了。
console.log(module.exports === exports)//false