1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯網營銷解決方案
      nodejs中exports與module.exports的區(qū)別是什么-創(chuàng)新互聯

      nodejs中exports與module.exports的區(qū)別是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

      創(chuàng)新互聯2013年開創(chuàng)至今,先為遼中等服務建站,遼中等地企業(yè),進行企業(yè)商務咨詢服務。為遼中企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

      app.js

      var a = {name: 'nswbmw 1'};
      var b = a;
      console.log(a);
      console.log(b);
      b.name = 'nswbmw 2';
      console.log(a);
      console.log(b);
      var b = {name: 'nswbmw 3'};
      console.log(a);
      console.log(b);

      運行 app.js 結果為:

      { name: 'nswbmw 1' }
      { name: 'nswbmw 1' }
      { name: 'nswbmw 2' }
      { name: 'nswbmw 2' }
      { name: 'nswbmw 2' }
      { name: 'nswbmw 3' }

      解釋一下:a 是一個對象,b 是對 a 的引用,即 a 和 b 指向同一個對象,即 a 和 b 指向同一塊內存地址,所以前兩個輸出一樣。當對 b 作修改時,即 a 和 b 指向同一塊內存地址的內容發(fā)生了改變,所以 a 也會體現出來,所以第三、四個輸出一樣。當對 b 完全覆蓋時,b 就指向了一塊新的內存地址(并沒有對原先的內存塊作修改),a 還是指向原來的內存塊,即 a 和 b 不再指向同一塊內存,也就是說此時 a 和 b 已毫無關系,所以最后兩個輸出不一樣。

      明白了上述例子后,我們進入正題。

      我們只需知道三點即可知道 exports 和 module.exports 的區(qū)別了:

      • exports 是指向的 module.exports 的引用

      • module.exports 初始值為一個空對象 {},所以 exports 初始值也是 {}

      • require() 返回的是 module.exports 而不是 exports

      所以:我們通過

      var name = 'nswbmw';
      exports.name = name;
      exports.sayName = function() {
       console.log(name);
      }

      給 exports 賦值其實是給 module.exports 這個空對象添加了兩個屬性而已,上面的代碼相當于:

      var name = 'nswbmw';
      module.exports.name = name;
      module.exports.sayName = function() {
       console.log(name);
      }

      我們通常這樣使用 exports 和 module.exports

      一個簡單的例子,計算圓的面積:

      使用 exports

      app.js

      var circle = require('./circle');
      console.log(circle.area(4));

      circle.js

      exports.area = function(r) {
       return r * r * Math.PI;
      }

      使用 module.exports

      app.js

      var area = require('./area');
      console.log(area(4));

      area.js

      module.exports = function(r) {
       return r * r * Math.PI;
      }

      上面兩個例子輸出是一樣的。你也許會問,為什么不這樣寫呢?

      app.js

      var area = require('./area');
      console.log(area(4));

      area.js

      exports = function(r) {
       return r * r * Math.PI;
      }

      運行上面的例子會報錯。這是因為,前面的例子中通過給 exports 添加屬性,只是對 exports 指向的內存做了修改,而

      exports = function(r) {
       return r * r * Math.PI;
      }

      其實是對 exports 進行了覆蓋,也就是說 exports 指向了一塊新的內存(內容為一個計算圓面積的函數),也就是說 exports 和 module.exports 不再指向同一塊內存,也就是說此時 exports 和 module.exports 毫無聯系,也就是說 module.exports 指向的那塊內存并沒有做任何改變,仍然為一個空對象 {} ,也就是說 area.js 導出了一個空對象,所以我們在 app.js 中調用 area(4) 會報 TypeError: object is not a function 的錯誤。

      所以,一句話做個總結:當我們想讓模塊導出的是一個對象時,exports 和 module.exports 均可使用(但 exports也不能重新覆蓋為一個新的對象),而當我們想導出非對象接口時,就必須也只能覆蓋 module.exports。

      我們經常看到這樣的用寫法:

      exports = module.exports = somethings;

      上面的代碼等價于

      module.exports = somethings;
      exports = module.exports;

      原因也很簡單,module.exports = somethings 是對 module.exports 進行了覆蓋,此時 module.exports 和 exports 的關系斷裂,module.exports 指向了新的內存塊,而 exports 還是指向原來的內存塊,為了讓 module.exports 和 exports 還是指向同一塊內存或者說指向同一個 “對象”,所以我們就 exports = module.exports。

      關于nodejs中exports與module.exports的區(qū)別是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯網站建設公司行業(yè)資訊頻道了解更多相關知識。

      另外有需要云服務器可以了解下創(chuàng)新互聯建站www.cdcxhl.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


      文章名稱:nodejs中exports與module.exports的區(qū)別是什么-創(chuàng)新互聯
      文章鏈接:http://ef60e0e.cn/article/cdjopd.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        普兰县| 梅州市| 安顺市| 平果县| 县级市| 龙山县| 区。| 太和县| 海伦市| 海晏县| 安阳县| 文成县| 汽车| 宁国市| 绩溪县| 慈溪市| 波密县| 板桥市| 宁安市| 农安县| 台中市| 长丰县| 铜山县| 政和县| 德庆县| 新乐市| 峡江县| 茌平县| 永新县| 高邑县| 文昌市| 临朐县| 泌阳县| 大洼县| 巴里| 镇安县| 乐亭县| 海南省| 探索| 兴安盟| 沂源县|