最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解nodejs中exports和module.exports的區(qū)別

 更新時間:2017年02月17日 14:08:38   作者:nswbmw  
本文主要介紹了exports 和 module.exports 的區(qū)別。具有很好的參考價值,下面跟著小編一起來看下吧

require 用來加載代碼,而 exports 和 module.exports 則用來導(dǎo)出代碼。但很多新手可能會迷惑于 exports 和 module.exports 的區(qū)別,為了更好的理解 exports 和 module.exports 的關(guān)系,我們先來鞏固下 js 的基礎(chǔ)。示例:

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 結(jié)果為:

{ 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 指向同一塊內(nèi)存地址,所以前兩個輸出一樣。當(dāng)對 b 作修改時,即 a 和 b 指向同一塊內(nèi)存地址的內(nèi)容發(fā)生了改變,所以 a 也會體現(xiàn)出來,所以第三、四個輸出一樣。當(dāng)對 b 完全覆蓋時,b 就指向了一塊新的內(nèi)存地址(并沒有對原先的內(nèi)存塊作修改),a 還是指向原來的內(nèi)存塊,即 a 和 b 不再指向同一塊內(nèi)存,也就是說此時 a 和 b 已毫無關(guān)系,所以最后兩個輸出不一樣。

明白了上述例子后,我們進(jìn)入正題。

我們只需知道三點即可知道 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 這個空對象添加了兩個屬性而已,上面的代碼相當(dāng)于:

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 指向的內(nèi)存做了修改,而

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

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

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

我們經(jīng)常看到這樣的用寫法:

exports = module.exports = somethings;

上面的代碼等價于

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

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

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • linux 下以二進(jìn)制的方式安裝 nodejs

    linux 下以二進(jìn)制的方式安裝 nodejs

    這篇文章主要介紹了linux 下以二進(jìn)制的方式安裝 nodejs,文中給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • nodejs個人博客開發(fā)第七步?后臺登陸

    nodejs個人博客開發(fā)第七步?后臺登陸

    這篇文章主要為大家詳細(xì)介紹了nodejs個人博客開發(fā)的后臺登陸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    這篇文章主要給大家介紹了關(guān)于NodeJs環(huán)境中NODE_ENV介紹和設(shè)置的相關(guān)資料,NODE_ENV其實就是環(huán)境變量之一,用于設(shè)置nodejs當(dāng)前的運行環(huán)境,需要的朋友可以參考下
    2024-07-07
  • 詳解50行代碼,Node爬蟲練手項目

    詳解50行代碼,Node爬蟲練手項目

    這篇文章主要介紹了50行代碼,Node爬蟲練手項目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Node.js使用supervisor進(jìn)行開發(fā)中調(diào)試的方法

    Node.js使用supervisor進(jìn)行開發(fā)中調(diào)試的方法

    今天小編就為大家分享一篇關(guān)于Node.js使用supervisor進(jìn)行開發(fā)中調(diào)試的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Node.js基于cors解決接口跨域的問題(推薦)

    Node.js基于cors解決接口跨域的問題(推薦)

    這篇文章主要介紹了Node.js基于cors解決接口跨域的問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • koa-compose簡單實現(xiàn)及使用的妙處

    koa-compose簡單實現(xiàn)及使用的妙處

    這篇文章主要為大家介紹了koa-compose簡單實現(xiàn)及使用的妙處詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Node 搭建一個靜態(tài)資源服務(wù)器的實現(xiàn)

    Node 搭建一個靜態(tài)資源服務(wù)器的實現(xiàn)

    這篇文章主要介紹了Node 搭建一個靜態(tài)資源服務(wù)器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Nodejs實現(xiàn)的操作MongoDB數(shù)據(jù)庫功能完整示例

    Nodejs實現(xiàn)的操作MongoDB數(shù)據(jù)庫功能完整示例

    這篇文章主要介紹了Nodejs實現(xiàn)的操作MongoDB數(shù)據(jù)庫功能,結(jié)合完整實例形式分析了nodejs針對MongoDB數(shù)據(jù)庫的連接及增刪改查基本操作技巧,需要的朋友可以參考下
    2019-02-02
  • Centos7 中 Node.js安裝簡單方法

    Centos7 中 Node.js安裝簡單方法

    這篇文章主要介紹了Centos7 中 Node.js安裝簡單方法,非常不錯具有一定的參考借鑒價值,需要的朋友可以參考下
    2016-11-11

最新評論

镇赉县| 常熟市| 荣成市| 西平县| 中超| 长岭县| 繁昌县| 茌平县| 邯郸县| 台东市| 安国市| 长顺县| 东平县| 麻阳| SHOW| 高密市| 南开区| 陆丰市| 龙州县| 全州县| 老河口市| 青河县| 休宁县| 平顺县| 怀集县| 建湖县| 什邡市| 苗栗市| 永州市| 漠河县| 湖北省| 安图县| 项城市| 永登县| 天峨县| 文山县| 沾益县| 静宁县| 高平市| 扎囊县| 凌云县|