module.exports 與 exports的區別

這個問題近半年看過三次,一直都是迷迷糊糊的,今天看樸大以及一些stack上面的資料終於算是明白點了,先記錄一下以避免忘記.javascript

大白話: exports 只是 module.exports 的引用,他們都指向內存中的同一個地址.java

node在加載模塊的時候,每一個模塊默認有一個module對象,該對象有個屬性exports;初始值是空對象{},能夠認爲require引入模塊調用的是module.exports最終指向的對象.node

—-那麼怎麼理解exports只是module.exports的引用呢.能夠這樣來看web

var module.exports={},
       exports=module.exports; //此時exports 和module.exports指向內存中同一塊區域

   //咱們導出一個函數當使用exports的時候.像這樣:
   exports=function(){
        console.log('export function');
    }
   //此時 exports指向的已是內存中另外一塊區域了,它已經和module.exports={},賦值的對象沒有任何關係,此時他們關係如此密切的兩個好基友再無瓜葛。咱們使用require()而後調用會報錯。

    //這種狀況導出就能夠工做很好理解,就是給最初的對象增長了一個屬性sayHello而已.
    exports.sayHello=function(){
        console.log('hello');
    }

實際上就相似於java中 引用類型 賦值 與修改.svg

在stackoverflow 看到特別6的解釋 請看:函數

var module = { exports: {} };
var exports = module.exports;

// your code

return module.exports;

參考資料請點擊:
https://cnodejs.org/topic/5231a630101e574521e45ef8ui

difference between module.exports and exportsspa

相關文章
相關標籤/搜索