exports和module.exports的區別——學習筆記


一開始,exportsmodule.exports都指向空對象(同一內存塊)exports是引用 module.exports的值。module.exports 被改變的時候,exports不會被改變,而模塊導出的時候,真正導出的執行是module.exports,而不是exports

/*app.js*/

var s = require("./log");

 s.log("hello");

 

//log.js

exports.log =function (str) {

console.log(str);

 }

 


 

//log.js
module.exports =function (str) {

console.log(str);

}

上述兩種用法都沒問題,但如果這樣使用

 

exports = function (str) { 
console.log(str);     
}

 

前面的例子只是給 exports指向的對象添加屬性,只是對 exports 指向的內存做了修改,內存指向並未發生改變。而上例則是對exports指向的內存進行了覆蓋,使exports指向了一塊新的內存,這樣,exports和module.exports指向的內存並不是同一塊,exports和module.exports並無任何關系。exports指向的內存有了變化,而module.exports指向的內存並無變化,仍為空對象{}。

 

 


 

 

 

 

 
//app.js
 var x = require('./init');
 console.log(x.a)
//init.js
 module.exports = {a: 2}//通過賦值的方式指向了另一塊內存
 exports.a = 1  //只是在原來指向的內存中添加屬性,內存指向並沒有變化

運行app.js會有輸出

2

 

這也就是module.exports對象不為空的時候exports對象就自動忽略因為module.exports通過賦值方式已經和exports對象指向的變量不同了exports對象怎么改和module.exports對象沒關系了。真正導出的執行是module.exports)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM