目錄
行到水窮處,坐看云起時。
前言
全局對象、全局變量:可在程序的任何地方訪問
在JavaScript中
全局對象:window
在Node.js中
全局對象:global。
所有全局變量(除global本身以外)都是 global 對象的屬性。
滿足以下條件的變量就是全局變量
1. 在最外層定義的變量;
Node.js中開發(fā)者不可能在最外層定義變量,因為所有用戶代碼都是屬于當(dāng)前模塊的, 而模塊本身不是最外層上下文。
2. 全局對象的屬性;
3. 隱式定義的變量(未定義直接賦值的變量)
當(dāng)定義一個全局變量時,這個變量同時也會成為全局對象的屬性。
最好不要使用 var 定義變量以避免引入全局變量,因為全局變量會污染命名空間,提高代碼的耦合風(fēng)險。
- __filename
輸出:文件所在位置的絕對路徑(包含當(dāng)前執(zhí)行腳本的文件名),且和命令行參數(shù)所指定的文件名不一定相同。
如果在模塊中,返回的值是模塊文件的路徑。
例1
// 輸出全局變量 __filename 的值
console.log( __filename );
輸出
/Users/cx/Desktop/nodejs/test.js
- __dirname
輸出:當(dāng)前執(zhí)行腳本所在的目錄
例1
console.log( __dirname );
===================
輸出
/Users/cx/Desktop/nodejs
- setTimeout(cb, ms)
在指定的毫秒(ms)數(shù)后執(zhí)行指定函數(shù)(cb),僅執(zhí)行一次。
返回一個代表定時器的句柄值
例1
function printHello(){
console.log( "Hello, World!");
}
// 兩秒后執(zhí)行以上函數(shù)
setTimeout(printHello, 2000);
===================
2s后輸出
Hello, World!
- clearTimeout(t)
停止一個通過 setTimeout() 創(chuàng)建的定時器
例1
function printHello(){
console.log( "Hello, World!");
}
// 兩秒后執(zhí)行以上函數(shù)
var t = setTimeout(printHello, 2000);
// 清除定時器
clearTimeout(t);
===================
- setInterval(cb, ms)
指定的毫秒(ms)數(shù)后執(zhí)行指定函數(shù)(cb)
返回一個代表定時器的句柄值
會不停地調(diào)用函數(shù),直到 clearInterval() 被調(diào)用或窗口被關(guān)閉
例1
function printHello(){
console.log( "Hello, World!");
}
// 兩秒后執(zhí)行以上函數(shù)
setInterval(printHello, 2000);
===================
每隔2s后輸出一個Hello, World!
Hello, World!
Hello, World!
。。。
- clearInterval(t)
停止一個通過 setInterval() 創(chuàng)建的定時器
- console
控制臺標(biāo)準(zhǔn)輸出
方法 | 說明 |
---|---|
console.log([data][, ...]) | 輸出字符并以換行符結(jié)束。如果只有一個參數(shù),則輸出這個參數(shù)的字符串形式。如果有多個參數(shù),則 以類似于C 語言 printf() 命令的格式輸出。 |
console.info([data][, ...]) | 輸出信息性消息,類似console.log。除在chrome中只會輸出文字外,其余會顯示一個藍(lán)色的驚嘆號。 |
console.error([data][, ...]) | 輸出錯誤消息。控制臺出現(xiàn)錯誤時:會有紅色的叉子。 |
console.warn([data][, ...]) | 輸出警告消息。控制臺出現(xiàn)警告時:會有黃色的驚嘆號。 |
console.dir(obj[, options]) | 用來對一個對象進(jìn)行檢查,并以易于閱讀和打印的格式顯示。 |
console.time(label) | 輸出時間,表示計時開始。 |
console.timeEnd(label) | 結(jié)束時間,表示計時結(jié)束。 |
console.trace(message[, ...]) | 當(dāng)前執(zhí)行的代碼在堆棧中的調(diào)用路徑。 |
console.assert(value[, message][, ...]) | 用于判斷某個表達(dá)式或變量是否為真。第一個參數(shù)是表達(dá)式,第二個參數(shù)是字符串。只有當(dāng)?shù)谝粋€參數(shù)為false,才會輸出第二個參數(shù),否則不會有任何結(jié)果。 |
例1
console.info("程序開始執(zhí)行:");
var counter = 10;
console.log("計數(shù): %d", counter);
console.time("獲取數(shù)據(jù)");
//
// 執(zhí)行一些代碼
//
console.timeEnd('獲取數(shù)據(jù)');
console.info("程序執(zhí)行完畢。")
===================
程序開始執(zhí)行:
計數(shù): 10
獲取數(shù)據(jù): 0.391ms
程序執(zhí)行完畢。
- process
描述當(dāng)前Node.js 進(jìn)程狀態(tài)的對象,提供了一個與操作系統(tǒng)的簡單接口。
方法 | 說明 |
---|---|
exit | 當(dāng)進(jìn)程將要退出時觸發(fā)。 |
beforeExit | 當(dāng) node 清空事件循環(huán),并且沒有其他安排時觸發(fā)這個事件。通常來說,當(dāng)沒有進(jìn)程安排時 node 退出,但是 'beforeExit' 的監(jiān)聽器可以異步調(diào)用,這樣 node 就會繼續(xù)執(zhí)行。 |
uncaughtException | 當(dāng)一個異常冒泡回到事件循環(huán),觸發(fā)這個事件。如果給異常添加了監(jiān)視器,默認(rèn)的操作(打印堆棧跟蹤信息并退出)就不會發(fā)生。 |
Signal 事件 | 當(dāng)進(jìn)程接收到信號時就觸發(fā)。信號列表詳見標(biāo)準(zhǔn)的 POSIX 信號名,如 SIGINT、SIGUSR1 等。 |
退出狀態(tài)碼 | 說明(exit中的code) |
---|---|
Uncaught Fatal Exception | 有未捕獲異常,并且沒有被域或 uncaughtException 處理函數(shù)處理。 |
Unused | 保留 |
Internal JavaScript Parse Error | JavaScript的源碼啟動 Node 進(jìn)程時引起解析錯誤。非常罕見,僅會在開發(fā) Node 時才會有。 |
Internal JavaScript Evaluation Failure | JavaScript 的源碼啟動 Node 進(jìn)程,評估時返回函數(shù)失敗。非常罕見,僅會在開發(fā) Node 時才會有。 |
Fatal Error | V8 里致命的不可恢復(fù)的錯誤。通常會打印到 stderr ,內(nèi)容為: FATAL ERROR |
Non-function Internal Exception Handler | 未捕獲異常,內(nèi)部異常處理函數(shù)不知為何設(shè)置為on-function,并且不能被調(diào)用。 |
Internal Exception Handler Run-Time Failure | 未捕獲的異常, 并且異常處理函數(shù)處理時自己拋出了異常。例如,如果 process.on('uncaughtException') 或 domain.on('error') 拋出了異常。 |
Unused | 保留 |
Invalid Argument | 可能是給了未知的參數(shù),或者給的參數(shù)沒有值。 |
Internal JavaScript Run-Time Failure | JavaScript的源碼啟動 Node 進(jìn)程時拋出錯誤,非常罕見,僅會在開發(fā) Node 時才會有。 |
Invalid Debug Argument | 設(shè)置了參數(shù)--debug 和/或 --debug-brk,但是選擇了錯誤端口。 |
Signal Exits | 如果 Node 接收到致命信號,比如SIGKILL 或 SIGHUP,那么退出代碼就是128 加信號代碼。這是標(biāo)準(zhǔn)的 Unix 做法,退出信號代碼放在高位。 |
例1
process.on('exit', function(code) {
// 以下代碼永遠(yuǎn)不會執(zhí)行
setTimeout(function() {
console.log("該代碼不會執(zhí)行");
}, 0);
console.log('退出碼為:', code);
});
console.log("程序執(zhí)行結(jié)束");
===================
程序執(zhí)行結(jié)束
退出碼為: 0
- Process
屬性 | 說明 |
---|---|
stdout | 標(biāo)準(zhǔn)輸出流。 |
stderr | 標(biāo)準(zhǔn)錯誤流。 |
stdin | 標(biāo)準(zhǔn)輸入流。 |
argv | argv 屬性返回一個數(shù)組,由命令行執(zhí)行腳本時的各個參數(shù)組成。它的第一個成員總是node,第二個成員是腳本文件名,其余成員是腳本文件的參數(shù)。 |
execPath | 返回執(zhí)行當(dāng)前腳本的 Node 二進(jìn)制文件的絕對路徑。 |
execArgv | 返回一個數(shù)組,成員是命令行下執(zhí)行腳本時,在Node可執(zhí)行文件與腳本文件之間的命令行參數(shù)。 |
env | 返回一個對象,成員為當(dāng)前 shell 的環(huán)境變量 |
exitCode | 進(jìn)程退出時的代碼,如果進(jìn)程優(yōu)通過 process.exit() 退出,不需要指定退出碼。 |
version | Node 的版本,比如v0.10.18。 |
versions | 一個屬性,包含了 node 的版本和依賴. |
config | 一個包含用來編譯當(dāng)前 node 執(zhí)行文件的 javascript 配置選項的對象。它與運(yùn)行 ./configure 腳本生成的 "config.gypi" 文件相同。 |
pid | 當(dāng)前進(jìn)程的進(jìn)程號。 |
title | 進(jìn)程名,默認(rèn)值為"node",可以自定義該值。 |
arch | 當(dāng)前 CPU 的架構(gòu):'arm'、'ia32' 或者 'x64'。 |
platform | 運(yùn)行程序所在的平臺系統(tǒng) 'darwin', 'freebsd', 'linux', 'sunos' 或 'win32' |
mainModule | require.main 的備選方法。不同點,如果主模塊在運(yùn)行時改變,require.main可能會繼續(xù)返回老的模塊。可以認(rèn)為,這兩者引用了同一個模塊。 |
方法 | 說明 |
---|---|
abort() | 這將導(dǎo)致 node 觸發(fā) abort 事件。會讓 node 退出并生成一個核心文件。 |
chdir(directory) | 改變當(dāng)前工作進(jìn)程的目錄,如果操作失敗拋出異常。 |
cwd() | 返回當(dāng)前進(jìn)程的工作目錄 |
exit([code]) | 使用指定的 code 結(jié)束進(jìn)程。如果忽略,將會使用 code 0。 |
getgid() | 獲取進(jìn)程的群組標(biāo)識(參見 getgid(2))。獲取到得時群組的數(shù)字 id,而不是名字。注意:這個函數(shù)僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。 |
setgid(id) | 設(shè)置進(jìn)程的群組標(biāo)識(參見 setgid(2))。可以接收數(shù)字 ID 或者群組名。如果指定了群組名,會阻塞等待解析為數(shù)字 ID 。 注意:這個函數(shù)僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。 |
getuid() | 獲取進(jìn)程的用戶標(biāo)識(參見 getuid(2))。這是數(shù)字的用戶 id,不是用戶名。注意:這個函數(shù)僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。 |
setuid(id) | 設(shè)置進(jìn)程的用戶標(biāo)識(參見setuid(2))。接收數(shù)字 ID或字符串名字。果指定了群組名,會阻塞等待解析為數(shù)字 ID 。 注意:這個函數(shù)僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。 |
getgroups() | 返回進(jìn)程的群組 iD 數(shù)組。POSIX 系統(tǒng)沒有保證一定有,但是 node.js 保證有。注意:這個函數(shù)僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。 |
setgroups(groups) | 設(shè)置進(jìn)程的群組 ID。這是授權(quán)操作,所以你需要有 root 權(quán)限,或者有 CAP_SETGID 能力。注意:這個函數(shù)僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。 |
initgroups(user, extra_group) | 讀取 /etc/group ,并初始化群組訪問列表,使用成員所在的所有群組。這是授權(quán)操作,所以你需要有 root 權(quán)限,或者有 CAP_SETGID 能力。注意:這個函數(shù)僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。 |
kill(pid[, signal]) | 發(fā)送信號給進(jìn)程. pid 是進(jìn)程id,并且 signal 是發(fā)送的信號的字符串描述。信號名是字符串,比如 'SIGINT' 或 'SIGHUP'。如果忽略,信號會是 'SIGTERM'。 |
memoryUsage() | 返回一個對象,描述了 Node 進(jìn)程所用的內(nèi)存狀況,單位為字節(jié)。 |
nextTick(callback) | 一旦當(dāng)前事件循環(huán)結(jié)束,調(diào)用回調(diào)函數(shù)。 |
umask([mask]) | 設(shè)置或讀取進(jìn)程文件的掩碼。子進(jìn)程從父進(jìn)程繼承掩碼。如果mask 參數(shù)有效,返回舊的掩碼。否則,返回當(dāng)前掩碼。 |
uptime() | 返回 Node 已經(jīng)運(yùn)行的秒數(shù)。 |
hrtime() | 返回當(dāng)前進(jìn)程的高分辨時間,形式為 [seconds, nanoseconds]數(shù)組。它是相對于過去的任意事件。該值與日期無關(guān),因此不受時鐘漂移的影響。主要用途是可以通過精確的時間間隔,來衡量程序的性能。你可以將之前的結(jié)果傳遞給當(dāng)前的 process.hrtime() ,會返回兩者間的時間差,用來基準(zhǔn)和測量時間間隔。 |
例1
// 輸出到終端
process.stdout.write("Hello World!" + "\n");
// 通過參數(shù)讀取
process.argv.forEach(function(val, index, array) {
console.log(index + ': ' + val);
});
// 獲取執(zhí)行路徑
console.log(process.execPath);
// 平臺信息
console.log(process.platform);
===================
Hello World!
0: /usr/local/Cellar/node/13.8.0/bin/node
1: /Users/cx/Desktop/nodejs/server.js
/usr/local/Cellar/node/13.8.0/bin/node
darwin
例2
// 輸出當(dāng)前目錄
console.log('當(dāng)前目錄: ' + process.cwd());
// 輸出當(dāng)前版本
console.log('當(dāng)前版本: ' + process.version);
// 輸出內(nèi)存使用情況
console.log(process.memoryUsage());
===================
當(dāng)前目錄: /Users/cx/Desktop/nodejs
當(dāng)前版本: v13.8.0
{
rss: 18313216,
heapTotal: 4902912,
heapUsed: 2677488,
external: 881072
}