Node js模組中用exports修飾變數後發生了什麼?

時間 2021-06-20 19:35:32

1樓:子羽西鳴

因為 Node 遵循的模組載入規範是 CommonJS 規範。

用require載入乙個模組時,會把模組內容封裝成乙個匿名函式,這個匿名函式接受模組中的module、module.exports 作為引數,隨後立即執行,生成乙個記憶體物件返回。Node 還會對這個物件進行快取,之後的呼叫都會從快取中取值。

所以 require 並且在隨後使用的 test ,其實是乙個類似下面這樣的物件,你操作的所有屬性和方法是這個物件中 exports 屬性裡的內容:

,loaded

:true

,...

}由於經過匿名函式傳參拿到的 module.exports 已經是傳值了,所以這個 exports 裡的內容是模組值的複製。

對於類似count這樣的 primitive value ,傳值就是複製,操作就是對快取中的值重新賦值,不會影響模組本身。

對於類似 myArray這樣的 object ,傳值是記憶體首位址, 操作是對記憶體操作,會影響模組。

2樓:hyj1991

產生這個現象的本質原因是 js 函式傳參時 call-by-sharing 的形式引起的…

推薦你看下這個:call-by-sharing

3樓:

functionshowData() {

console.log("count="+exports.count+" myArray.length="+myArray.length);

改成再看看?

4樓:揚靈

這就是node中的模組問題了,module. exports和exports的區別了,之前研究過,可以看看: http://

,僅供參考~

Nodejs 有沒有模組支援SHA1WithRSA的簽名方式?

zy445566 漏了rsaPrivateKey可以通過 fs.readFileSync pemPath toString 讀取出來 pemPath是私鑰路徑 seki annes 我也封裝了alipay的模組,你也可以直接用,畢竟阿里沒出node版的sdk,只能自己造輪子 zy445566 ali...

初學node js,可以看《node js實戰》一書嗎?

Chanki 還是挺不錯的樸靈老師的技術沒得說然後都是例項第一章就是用Express框架搭個blog 蠻好的但express框架最近貌似更新了 總之想直接上手專案的還是很推薦的講的很細 EthanChan 看看還是可以的,前面的一些東西寫得還行,至於上面提到的版本問題,覺得問題不大,執行報錯了再去看...

node js 應該 return new Error 還是 throw new Error ?

嚴駿 從沒return error過,如果這是個需要處理的error那為啥要用error,隨便什麼都可以return。throw的話,就說明發生了非法錯誤,不可知錯誤,未知錯誤。 已登出 傳乙個 Error C,Result C C 的 callback 出去 暴論 這樣你就能保證強制處理了。 猜你...