概念:所有屬性都可以在程式的任何地方訪問,即全域變數。在JavaScript中,通常window是全域對象,而Node.js的全域對象是global,
所有全域變數都是global對象的屬性,如:console、process等。
一、全域對象與全域變數
global最根本的作用是作為全域變數的宿主。滿足以下條件成為全域變數:
1.在最外層定義的變數
2.全域對象的屬性
3.隱式定義的變數(未定義直接賦值的變數)
在Node.js中不可能在最外層定義變數,因為所有使用者代碼都是屬於當前模組的,而模組本身不是最外層上下文。
二、process
它用於描述當前Node.js進程狀態的對象。提供了一個與作業系統的簡單介面,通常寫本地命令列程式的時候,會用到它。
1.process.argv是命令列參數數組,第一個元素是node,第二個元素是指令檔名,第三個元素開始每個元素是一個運行參數。
2.process.stdout是標準輸出資料流,通常我們使用的console.log() 其底層是用 process.stdout.write();實現。
//process.stdout.write("octopus");
3.process.stdin是標準輸入資料流,初始時它是被暫停。要想從標準輸入資料流讀取資料,必須恢複流,並手動編寫流的事件相應函數。
//恢複流
process.stdin.resume();
process.stdin.on('data',function(data){
process.stdout.write("read from console "+data.toString());
});
4.process.nextTick(callback)的功能是為事件迴圈設定一項任務。Node.js會在下次事件迴圈調響應時調用callback
Node.js適合IO密集型的應用,而不是計算密集型的應用。process.nextTick()提供了一個這樣工具,可以把複雜的工作拆散,
變成一個個較小的事件。
function doSomething(args,callback){
somethingComplited(args);
callback();
}
doSomething('12345',function onEnd(){
compute();
})
如果假設compute()和somethingComplited()是兩個較為耗時的函數。以上的程式在調用doSomething時會先執行somethingComplited(args),然後立即調用回呼函數,
在onEnd()中又會執行compute(),改寫為:
function doSomething(args,callback){
somethingComplited(args);
process.nextTick(callback);
}
使用process.nextTick()後,改寫後的程式會把上面耗時的操作拆分為兩個事件,減少每個事件的執行時間,提高事件相應速度。
5.process其他方法:process.platform()、process.pid()、process.execPath()、process.memoryUsage()等方法。。。
API連結:http://nodejs.org/api/process.html
三、console
java中的log4j的 Logger logger=LoggerManager.getLogger(*.class.getName());
logger.info
logger.warn
logger.error logger.fatal
FATAL:用在極端的情形中,即必須馬上獲得注意的情況。這個程度的錯誤通常需要觸發營運工程師的呼叫器。
ERROR:顯示一個錯誤,或一個通用的錯誤情況,但還不至於會將系統掛起。這種程度的錯誤一般會觸發郵件的發送,
將訊息發送到alert list中,營運人員可以在文檔中記錄這個bug並提交。
WARN:不一定是一個bug,但是有人可能會想要知道這一情況。如果有人在讀log檔案,他們通常會希望讀到系統出現的任何警告。
INFO:用於基本的、高層次的診斷資訊。在長時間啟動並執行程式碼片段開始運行及結束運行時應該產生訊息,以便知道現在系統在幹什麼。
但是這樣的資訊不宜太過頻繁。
DEBUG:用於協助低層次的調試。
console用於提供控制台標準輸出,Node.js沿用了這個標準,提供與習慣行為一直的console對象。
1.console.log().向標準輸出資料流列印字元並以分行符號結束。
使用案例:
console.log("hello");
console.log("hello%octopus");
console.log("hello%octopus"," Mr. ");
2.console.error();用法與console.log()相同,只是向標準錯誤流輸出。
3.console. trace();向標準錯誤流輸出當前的調用棧