#module.exports与exports的区别
对于node执行的每一个js文件,都会自动创建一个module模块对象,如同一个封闭的函数一样,把一个函数封闭起来,外部怎样才能去引用呢?必然需要对完暴露出来一个“门”,也就是暴露出来一个接口。。
module对象会创建一个exports的属性,初始化的值是一个空的对象,也就是module.exports = {};
打个比方:
有一个nodejs文件叫xxx.js
a = function (){
console.log('a');
}
module.exports={
a:a,
}
exports.a = 1;
另一个js文件叫xxx2.js(引入xxx.js)
var x = require('./xxx');
console.log(x.a);
这里返回的解决必定是a这个函数,而不是1,为什么呢?
首先根据定义来说;
- module.exports 初始值为一个空对象 {}
- require() 返回的是 module.exports 而不是 exports
结合另一篇文章来说 module.exports -》 暴露的对象 《- exports;
本身只想的确是一个对象,
如var b = a; var c = a;
当 var b = ‘1’;
b这个变量已经重新被赋值了,所以和c,a的关系断裂。因此已经和他们没有了关系。
同理可知,
本身module.exports -》 暴露的对象 《- exports; 这里相当于 b -》 a 《- c;
当对b重新定义以后,已经不再和a,c有关系。
这就是我理解的区别,
参考文章
https://cnodejs.org/topic/5231a630101e574521e45ef8
https://cnodejs.org/topic/52308842101e574521c16e06
每天一点进步,不求与人,不受限于人。
剩下的是个人扯淡。
此时这三个对应的是不同,a指向一块内存,理解b和c都是栈内存中一个索引,去指向a所在的那块内存(这一点抽象,不必理解。)
当 重新 var b = '1'; b就被重新赋值定义了,而不是在栈内存中的一个索引, 直接就去指向一块内存。