因為是做前端的,對node的生態一直也比較關注,對于node中對commonJS模塊化的實現給了我們很大的方便,之前對于導出的module.exports和exports一直模模糊糊,今天做一個整理
先來個js基礎部分的復習
let obj1 = {}let obj2 = obj1obj2.a = 'a'obj1.b = 'b'console.log(obj1) //{a: 'a', b: 'b'}console.log(obj2) //{a: 'a', b: 'b'}obj2 = {}console.log(obj2) //{}console.log(obj1) //{a: 'a', b: 'b'}obj1先指向內存中的一個區塊,然后將obj1指向內存區塊的引用傳遞給了obj2,那么這時obj1和obj2都指向了內存中的同一個區塊,所以無論是通過obj1還是obj2向這塊內存中加入屬性,都會同時反應在obj1和obj2的身上,這時候obj2切斷了與原先內存塊的聯系,指向了新的內存塊,而obj1還是指向最先的內存區塊,這時他們就各自管理各自的內存區塊
現在看看module.exports和exports的關系
如圖最開始的時候module.exports和exports都指向同一塊內存區域,紅線包含的區域,其中module.exports指向的區域用灰色填充

初始
現在我們導出為module.exports = {a: "a"},那么module.exports切斷與原來的紅色線包圍的內存塊,指向新的內存塊還是灰色填充的內存塊,如圖

導出module.exports
或者是我們導出為exports = {a: "a"},那么exports切斷與原來的紅線包含的內存塊,指向新的內存塊,如圖

導出為exports
重要的是我們通過require導入的永遠都是module.exports,即圖中灰色填充的內存塊,而不是紅色線條的最初始的內存塊,所以無論我們在導出的時候是用module.exports還是exports只要保證導出的內容是掛載在灰色內存塊上都是可行的
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答