淺談node中的exports與module.exports的關(guān)系
因?yàn)槭亲銮岸说?對node的生態(tài)一直也比較關(guān)注,對于node中對commonJS模塊化的實(shí)現(xiàn)給了我們很大的方便,之前對于導(dǎo)出的module.exports和exports一直模模糊糊,今天做一個整理
先來個js基礎(chǔ)部分的復(fù)習(xí)
let obj1 = {}
let obj2 = obj1
obj2.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先指向內(nèi)存中的一個區(qū)塊,然后將obj1指向內(nèi)存區(qū)塊的引用傳遞給了obj2,那么這時obj1和obj2都指向了內(nèi)存中的同一個區(qū)塊,所以無論是通過obj1還是obj2向這塊內(nèi)存中加入屬性,都會同時反應(yīng)在obj1和obj2的身上,這時候obj2切斷了與原先內(nèi)存塊的聯(lián)系,指向了新的內(nèi)存塊,而obj1還是指向最先的內(nèi)存區(qū)塊,這時他們就各自管理各自的內(nèi)存區(qū)塊
現(xiàn)在看看module.exports和exports的關(guān)系
如圖最開始的時候module.exports和exports都指向同一塊內(nèi)存區(qū)域,紅線包含的區(qū)域,其中module.exports指向的區(qū)域用灰色填充

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

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

導(dǎo)出為exports
重要的是我們通過require導(dǎo)入的永遠(yuǎn)都是module.exports,即圖中灰色填充的內(nèi)存塊,而不是紅色線條的最初始的內(nèi)存塊,所以無論我們在導(dǎo)出的時候是用module.exports還是exports只要保證導(dǎo)出的內(nèi)容是掛載在灰色內(nèi)存塊上都是可行的
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Node.js學(xué)習(xí)教程之Module模塊
- vue中node_modules中第三方模塊的修改使用詳解
- 深入理解Node module模塊
- nodejs中exports與module.exports的區(qū)別詳細(xì)介紹
- node.js中module.exports與exports用法上的區(qū)別
- NodeJS學(xué)習(xí)筆記之Module的簡介
- 深入理解node exports和module.exports區(qū)別
- node中modules.exports與exports導(dǎo)出的區(qū)別
- 詳解Node.js中exports和module.exports的區(qū)別
- Node.js 中exports 和 module.exports 的區(qū)別
- node.js中module模塊的功能理解與用法實(shí)例分析
相關(guān)文章
node.js中的console.timeEnd方法使用說明
這篇文章主要介紹了node.js中的console.timeEnd方法使用說明,本文介紹了console.timeEnd的方法說明、語法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
Nodejs實(shí)現(xiàn)的一個靜態(tài)服務(wù)器實(shí)例
這篇文章主要介紹了Nodejs實(shí)現(xiàn)的一個靜態(tài)服務(wù)器實(shí)例,本文實(shí)現(xiàn)的靜態(tài)服務(wù)器實(shí)例包含cache功能、壓縮功能等,需要的朋友可以參考下2014-12-12
Node.js數(shù)據(jù)庫操作之連接MySQL數(shù)據(jù)庫(一)
前一陣在做項(xiàng)目的時候,需要通過nodejs連接到MySQL數(shù)據(jù)庫,于是簡單地學(xué)習(xí)了一下MySQL這個庫,分享一些學(xué)習(xí)心得給大家,希望對大家有幫助。下面這篇文章主要介紹了Node.js數(shù)據(jù)庫操作之連接MySQL數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下。2017-03-03
在NodeJs中使用node-schedule增加定時器任務(wù)的方法
這篇文章主要介紹了從零開始在NodeJs中使用node-schedule增加定時器任務(wù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Pleas
這篇文章主要介紹了NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to的相關(guān)資料,需要的朋友可以參考下2016-12-12
node連接MongoDB數(shù)據(jù)庫錯誤:MongoServerSelectionError:?connect?ECON
使用node連接MongoDB數(shù)據(jù)庫時發(fā)生報(bào)錯,MongoServerSelectionError:?connect?ECONNREFUSED?::1:27017,本文給大家分享原因分析及解決方案,感興趣的朋友跟隨小編一起看看吧2023-04-04
使用travis-ci如何持續(xù)部署node.js應(yīng)用詳解
最近在學(xué)習(xí)使用 travis-ci 對項(xiàng)目進(jìn)行持續(xù)集成測試,所以下面這篇文章主要給大家介紹了關(guān)于使用travis-ci如何持續(xù)部署node.js應(yīng)用的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
基于html5和nodejs相結(jié)合實(shí)現(xiàn)websocket即使通訊
HTML5 擁有許多引人注目的新特性,如 Canvas、本地存儲、多媒體編程接口、WebSocket 等等。雖然現(xiàn)在大家把它捧的很火的樣子,但是個人認(rèn)為它還需要其他平臺的支持才能真正的"火起來"2015-11-11

