module.exports 与 exports的区别(整理的一些exports的总结)


#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,为什么呢?

首先根据定义来说;

  1. module.exports 初始值为一个空对象 {}
  2. 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就被重新赋值定义了,而不是在栈内存中的一个索引,  直接就去指向一块内存。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM