node.js中module.exports與exports用法上的區(qū)別
Node.js 引入了模塊(Module)概念,一個(gè)模塊可以通過module.exports 或 exports 將函數(shù)、變量等導(dǎo)出,以使其它 JavaScript 腳本通過require() 函數(shù)引入并使用?!?br />
module.exports 初始值為一個(gè)空對(duì)象 {},所以 exports 初始值也是 {},exports 是指向的 module.exports 的引用,在模塊內(nèi)部大概是這樣:
exports = module.exports = {};
舉個(gè)栗子,在node.js中創(chuàng)建模塊非常簡(jiǎn)單,一個(gè)文件就是一個(gè)模塊,所以我們創(chuàng)建一個(gè)name.js文件就創(chuàng)建了一個(gè)模塊name.js,使用exports和require對(duì)象對(duì)外提供接口和引用模塊。
name.js
var myName=function(){ var name='AmberYLopez'; console.log(name); }; exports.myName=myName;
這樣在使用的時(shí)候需要這樣
app.js
var name=require('./name');
如果我們創(chuàng)建的name.js文件是使用module.exports和require對(duì)象對(duì)外提供接口和引用模塊。
name.js
var myName=function(){ var name='AmberYLopez'; console.log(name); }; module.exports=myName;
app.js
var name=require('./name');
exports 賦值其實(shí)是給 module.exports 這個(gè)空對(duì)象添加myName屬性而已,為什么exports要使用添加屬性的方式,而不用exports=myName?
exports是引用 module.exports的值。exports 被改變的時(shí)候,module.exports不會(huì)被改變,而模塊導(dǎo)出的時(shí)候,真正導(dǎo)出的執(zhí)行是module.exports,而不是exports。
如果將name.js改為
var myName=function(){ var name='AmberYLopez'; console.log(name); }; exports=myName;
app.js
var name=require('./name');<br>console.log(name);
運(yùn)行會(huì)報(bào)錯(cuò)。因?yàn)?,前面是通過給 exports 添加屬性,而現(xiàn)在對(duì) exports 指向的內(nèi)存做了修改,exports 和 module.exports 不再指向同一塊內(nèi)存,即 module.exports 指向的那塊內(nèi)存并沒有做任何改變,仍然為一個(gè)空對(duì)象 {},所以會(huì)報(bào)錯(cuò)。
相關(guān)文章
NodeJs實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼
本篇文章主要介紹了NodeJs實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12nodejs命令行參數(shù)處理模塊commander使用實(shí)例
這篇文章主要介紹了nodejs命令行參數(shù)處理模塊commander使用實(shí)例,commander是一個(gè)非常高大上的令行參數(shù)處理模塊,需要的朋友可以參考下2014-09-09測(cè)試驅(qū)動(dòng)ChatGPT編程示例詳解
這篇文章主要為大家介紹了測(cè)試驅(qū)動(dòng)ChatGPT編程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03從零學(xué)習(xí)node.js之mysql數(shù)據(jù)庫的操作(五)
因?yàn)榻佑|Node.JS已經(jīng)有一段時(shí)間了,最近粗略的研究了一下node.js操作數(shù)據(jù)庫的包,覺得node.js連接數(shù)據(jù)庫不錯(cuò)。下面這篇文章主要給大家介紹了node.js之mysql數(shù)據(jù)庫操作的相關(guān)資料,需要的朋友可以參考下。2017-02-02Node.js中使用Log.io在瀏覽器中實(shí)時(shí)監(jiān)控日志(等同tail -f命令)
這篇文章主要介紹了Node.js中使用Log.io在瀏覽器中實(shí)時(shí)監(jiān)控日志,Log.io等同于tail -f命令,但更強(qiáng)大,需要的朋友可以參考下2014-09-09Node.js調(diào)用java之node-java問題
這篇文章主要介紹了Node.js調(diào)用java之node-java問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10