標籤:ref 令行 非同步呼叫 ret 全域對象 異常 調用 usr 清空
JavaScript 中有一個特殊的對象,稱為全域對象(Global Object),它及其所有屬性都可以在程式的任何地方訪問,即全域變數。
在瀏覽器 JavaScript 中,通常 window 是全域對象, 而 Node.js 中的全域對象是 global,所有全域變數(除了 global 本身以外)都是 global 對象的屬性。
在 Node.js 我們可以直接存取到 global 的屬性,而不需要在應用中包含它。
全域對象與全域變數
global 最根本的作用是作為全域變數的宿主。按照 ECMAScript 的定義,滿足以下條 件的變數是全域變數:
- 在最外層定義的變數;
- 全域對象的屬性;
- 隱式定義的變數(未定義直接賦值的變數)。
當你定義一個全域變數時,這個變數同時也會成為全域對象的屬性,反之亦然。需要注 意的是,在 Node.js 中你不可能在最外層定義變數,因為所有使用者代碼都是屬於當前模組的, 而模組本身不是最外層上下文。
注意: 永遠使用 var 定義變數以避免引入全域變數,因為全域變數會汙染 命名空間,提高代碼的耦合風險。
process
process 是一個全域變數,即 global 對象的屬性。
它用於描述當前Node.js 進程狀態的對象,提供了一個與作業系統的簡單介面。通常在你寫本地命令列程式的時候,少不了要 和它打交道。下面將會介紹 process 對象的一些最常用的成員方法。
| 序號 |
事件 & 描述 |
| 1 |
exit 當進程準備退出時觸發。 |
| 2 |
beforeExit 當 node 清空事件迴圈,並且沒有其他安排時觸發這個事件。通常來說,當沒有進程安排時 node 退出,但是 ‘beforeExit‘ 的監聽器可以非同步呼叫,這樣 node 就會繼續執行。 |
| 3 |
uncaughtException 當一個異常冒泡回到事件迴圈,觸發這個事件。如果給異常添加了監視器,預設的操作(列印堆疊追蹤資訊並退出)就不會發生。 |
| 4 |
Signal 事件 當進程接收到訊號時就觸發。訊號列表詳見標準的 POSIX 訊號名,如 SIGINT、SIGUSR1 等。 |
執行個體
建立檔案 main.js ,代碼如下所示:
process.on(‘exit‘, function(code) { // 以下代碼永遠不會執行 setTimeout(function() { console.log("該代碼不會執行"); }, 0); console.log(‘退出碼為:‘, code);});console.log("程式執行結束");
執行 main.js 檔案,代碼如下所示:
node main.js
程式執行結束退出碼為: 0
Node.js 全域對象