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