Node.JS中的模塊、exports和module講解
模塊
分為兩大類
核心模塊
- 由node引擎提供的模塊
- 核心模塊的標(biāo)識(shí)就是模塊的名字
var fs=require("fs");
文件模塊
由用戶自己創(chuàng)建的模塊文件模塊的標(biāo)識(shí)就是文件的路徑(絕對(duì)路徑、相對(duì)路徑),相對(duì)路徑用的更多,相對(duì)路徑使用.或者…開(kāi)頭
在node中有一個(gè)全局對(duì)象global,它的作用和網(wǎng)頁(yè)中window類似,在全局中創(chuàng)建的變量都會(huì)作為global的屬性保存,在全局中創(chuàng)建的函數(shù)會(huì)作為global的方法保存
arguements表示函數(shù)的變量
arguements.callee這個(gè)屬性保存的是當(dāng)前執(zhí)行的函數(shù)對(duì)象
如果在arguments.callee后面+“”,代表拼串,會(huì)把函數(shù)打印出來(lái)
console.log(arguments.callee+"");
當(dāng)node在執(zhí)行模塊中的代碼時(shí),它會(huì)首先在代碼的最頂部,添加如下代碼
function (exports, require, module, __filename, __dirname) {
在代碼的最底部,添加如下代碼
}
實(shí)際上模塊中的代碼都是包裝在一個(gè)函數(shù)中執(zhí)行的,并且在函數(shù)執(zhí)行時(shí),同時(shí)傳遞進(jìn)了5個(gè)實(shí)參
exports:該對(duì)象將變量或函數(shù)暴露到外部
require:函數(shù),用來(lái)引入外部的模塊
module:代表當(dāng)前模塊本身,exports就是module的屬性,既可以使用exports到處,也可以使用module.exports導(dǎo)出
console.log(exports); console.log(module.exports); console.log(module.exports==exports);
_filename:當(dāng)前模塊的完整路徑
console.log(__filename);
_dirname:當(dāng)前模塊所在文件夾的完整路徑
console.log(__dirname);
helloModule.js
module.exports={ name:'豬八戒', age:28, sayName:function(){ console.log("我是豬八戒"); } }
05.module.js
var hello=require("./helloModule"); console.log(hello.name); console.log(hello.age); console.log(hello.sayName);
基本數(shù)據(jù)類型
var a=10; var b=a; a++; console.log("a="+a); console.log("b="+b);
基本數(shù)據(jù)類型的值是相互獨(dú)立的,所以a++后,b不發(fā)生改變
可以從堆棧內(nèi)存中進(jìn)行分析,在存入變量和值后,a的值10和b的值是獨(dú)立的,此時(shí)a的值變化不影響b的值
引用數(shù)據(jù)類型
此時(shí)再看到引用變量
var obj=new Object(); obj.name="孫悟空"; var obj2=obj; obj2.name="豬八戒"; console.log("obj="+obj.name); console.log("obj2="+obj2.name);
當(dāng)出現(xiàn)new時(shí),就需要往堆內(nèi)存中存放對(duì)象,棧內(nèi)存中存放變量,對(duì)象沒(méi)有名字,只有內(nèi)存地址(16進(jìn)制地址),變量的值就是地址值,此時(shí)會(huì)有指針指向堆內(nèi)存中的對(duì)象
此時(shí)加入obj.name時(shí),會(huì)加到堆內(nèi)存中的對(duì)象
當(dāng)對(duì)obj2設(shè)置為null,對(duì) obj 沒(méi)有影響
因?yàn)閛bj2改變的是變量,obj2.name改變的是對(duì)象
exports和module.exports的關(guān)系
此時(shí)再轉(zhuǎn)回到module.exports和exports
module.exports改變的是對(duì)象,exports改變的是變量的值,此時(shí)運(yùn)行就會(huì)報(bào)錯(cuò)
通過(guò)exports只能使用.的方式來(lái)向外暴露內(nèi)部變量
exports.xxx=xx;
而module.exports既可以通過(guò).的形式,也可以直接賦值
module.exports.xxx=xx; //或者 module.exports={...}
通過(guò)exports只能使用.的方式來(lái)向外暴露內(nèi)部變量
exports.xxx=xx;
而module.exports既可以通過(guò).的形式,也可以直接賦值
module.exports.xxx=xx; //或者 module.exports={...}
到此這篇關(guān)于Node.JS中的模塊、exports和module講解的文章就介紹到這了,更多相關(guān)node.js模塊、exports和module內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nodejs入門(mén)教程五:連接數(shù)據(jù)庫(kù)的方法分析
這篇文章主要介紹了nodejs入門(mén)教程之連接數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了nodejs連接數(shù)據(jù)庫(kù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-04-04node將對(duì)象轉(zhuǎn)化為query的實(shí)現(xiàn)方法
本文主要介紹了node將對(duì)象轉(zhuǎn)化為query的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié)
本文主要介紹了Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05使用vs code開(kāi)發(fā)Nodejs程序的使用方法
本篇文章主要介紹了使用vs code開(kāi)發(fā)Nodejs程序的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Node.js開(kāi)發(fā)靜態(tài)資源服務(wù)器
這篇文章主要為大家介紹了Node.js開(kāi)發(fā)靜態(tài)資源服務(wù)器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08詳解Express筆記之動(dòng)態(tài)渲染HTML(新手入坑)
這篇文章主要介紹了詳解Express筆記之動(dòng)態(tài)渲染HTML(新手入坑),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12