模块化开发历史----commonJS规范(exports和module.exports的区别)

76 阅读1分钟

在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中的地址,是一个引用赋值

2.PNG

此时

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