一、常見的全局對象
1.全局對象的定義
- 全局對象(Global Object),它及其所有屬性都可以在程序的任何地方訪問,即全局變量。
- 在瀏覽器JavaScript中,通常
window
是全局對象 - 在Node.js中,全局對象是
global
,所有的全局對象都是global
對象的屬性。
控制檯打印的global
<ref *1> Object [global] {
global: [Circular *1],
clearInterval: [Function: clearInterval],
clearTimeout: [Function: clearTimeout],
setInterval: [Function: setInterval],
setTimeout: [Function: setTimeout] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
queueMicrotask: [Function: queueMicrotask],
performance: Performance {
nodeTiming: PerformanceNodeTiming {
name: 'node',
entryType: 'node',
startTime: 0,
duration: 26.296499997377396,
nodeStart: 0.5467000007629395,
v8Start: 1.967500001192093,
bootstrapComplete: 19.882200002670288,
environment: 9.948199987411499,
loopStart: -1,
loopExit: -1,
idleTime: 0
},
timeOrigin: 1669688619386.091
},
clearImmediate: [Function: clearImmediate],
setImmediate: [Function: setImmediate] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
}
}
2.特殊的全局變量
__dirname
輸出當前目錄__filename
輸出當前文件的目錄,及文件名
exports
module
require()
這些全局對象實際上模塊中的變量,只是每個模塊都有,看起來像是全局變量。
在命令行交互中是不可以使用的。
setTimeout(cb, ms)
全局函數在指定的毫秒(ms)數後執行指定函數(cb)。:setTimeout() 只執行一次指定函數。clearTimeout(t)
全局函數用於停止一個之前通過 setTimeout() 創建的定時器。 參數t
是通過 setTimeout() 函數創建的定時器。setInterval(cb, ms)
全局函數在指定的毫秒(ms)數後執行指定函數(cb),這個函數可以使用clearInterval()函數來清除。console
:提供簡單的調試控制檯,用於向標準輸出流(stdout)或標準錯誤流(stderr)輸出字符。process
:process提供了Node進程中相關的信息, 即 global 對象的屬性,用於描述當前Node.js 進程狀態的對象,提供了一個與操作系統的簡單接口。
二、模塊化開發
1.CommonJS
CommonJS
是一個規範,簡稱爲CJS
Node
是CommonJS
在服務器端一個具有代表性的實現,Node
中對CommonJS
進行了支持和實現,讓我們在開發node的過程中可以方便的進行模塊化開發- 在
Node
中每一個js
文件都是一個單獨的模塊; - 這個模塊中包括
CommonJS
規範的核心變量:exports
、module.exports
、require
- 我們可以使用這些變量來方便的進行模塊化開發
模塊化的核心是導入和導出
- exports和module.exports可以負責對模塊中的內容進行導出
- require函數可以幫助我們導入其他模塊(自定義模塊、系統模塊、第三方庫模塊)中的內容
exports 和 module.exports 的使用
- 如果要對外暴露屬性或方法,就用 exports 就行,要暴露對象(類似class,包含了很多屬性和方法),就用 module.exports。
- 不建議同時使用 exports 和 module.exports。
- 如果先使用 exports 對外暴露屬性或方法,再使用 module.exports 暴露對象,會使得 exports 上暴露的屬性或者方法失效。
三、require細節
1.require('X')的查找規範
情況一 像http fs這種內置模塊,直接返回核心模塊
情況二 X是以./或../開頭的。
-
如果有後綴名,按照後綴名的格式查找對應的文件;
-
如果沒有後綴名,
- 直接查找文件X
- 查找X.js文件
- 查找X.json文件
- 查找X.node文件
-
如果滅找到對應的文件,將X作爲一個目錄
查找目錄下的index文件
- 查找X/index.js文件
- 查找X/index.json文件
- 查找X/index.node文件
情況三 在node_moudles文件夾中查找
四、exports導出方式
方式一
exports = {
name:'mwf'
}
module.exports = exports
方式二
module.exports={
name:'mwf'
}
exports = module.exports
最終目的都是讓他們兩個指向同一個對象