如今介紹 Node.js 全局對象,global 全局對象無需引用就能夠直接使用。
JavaScript 中有一個特殊的對象,稱爲全局對象(Global Object),它及其全部屬性均可以在程序的任何地方訪問,即全局變量。
在瀏覽器 JavaScript 中,一般window 是全局對象, 而Node.js 中的全局對象是 global,全部全局變量(除了 global 自己之外)都是 global 對象的屬性。
咱們在Node.js 中可以直接訪問到對象一般都是 global 的屬性,如 console、process 等,
。。。
全局對象與全局變量
global 最根本的做用是做爲全局變量的宿主。按照 ECMAScript 的定義,知足如下條件的變量是全局變量:
在最外層定義的變量;
全局對象的屬性;
隱式定義的變量(未定義直接賦值的變量)。
當你定義一個全局變量時,這個變量同時也會成爲全局對象的屬性,反之亦然。須要注 意的是,在Node.js 中你不可能在最外層定義變量,由於全部用戶代碼都是屬於當前模塊的, 而模塊自己不是最外層上下文。 http://www.iis7.com/b/yqlj/ 批量友情連接檢測
注意: 永遠使用var 定義變量以免引入全局變量,由於全局變量會污染 命名空間,提升代碼的耦合風險。
。。。
process
process 是一個全局變量,即 global 對象的屬性。
它用於描述當前Node.js 進程狀態 的對象,提供了一個與操做系統的簡單接口。一般在你寫本地命令行程序的時候,少不了要 和它打交道。下面將會介紹process 對象的一些最經常使用的成員方法。
process.argv是命令行參數數組,第一個元素是 node,第二個元素是腳本文件名, 從第三個元素開始每一個元素是一個運行參數。
console.log(process.argv);
將以上代碼存儲爲argv.js,經過如下命令運行:
$ node argv.js 1991 name=byvoid --v "Carbo Kuo"
[ 'node',
'/home/byvoid/argv.js',
'1991',
'name=byvoid',
'--v',
'Carbo Kuo' ]
process.stdout是標準輸出流,一般咱們使用的 console.log() 向標準輸出打印 字符,而 process.stdout.write() 函數提供了更底層的接口。
process.stdin是標準輸入流,初始時它是被暫停的,要想從標準輸入讀取數據, 你必須恢復流,並手動編寫流的事件響應函數。
process.stdin.resume();
process.stdin.on('data', function(data) {
process.stdout.write('read from console: ' + data.toString());
});
process.nextTick(callback)的功能是爲事件循環設置一項任務,Node.js 會在 下次事件循環調響應時調用 callback。
初學者極可能不理解這個函數的做用,有什麼任務不能在當下執行完,須要交給下次事 件循環響應來作呢?
咱們討論過,Node.js 適合I/O 密集型的應用,而不是計算密集型的應用, 由於一個Node.js 進程只有一個線程,所以在任什麼時候刻都只有一個事件在執行。
若是這個事 件佔用大量的CPU 時間,執行事件循環中的下一個事件就須要等待好久,所以Node.js 的一 個編程原則就是儘可能縮短每一個事件的執行時間。process.nextTick() 提供了一個這樣的 工具,能夠把複雜的工做拆散,變成一個個較小的事件。
functiondoSomething(args, callback) {
somethingComplicated(args);
callback();
}
doSomething(functiononEnd() {
compute();
});
咱們假設compute() 和somethingComplicated() 是兩個較爲耗時的函數,以上 的程序在調用 doSomething() 時會先執行somethingComplicated(),而後當即調用 回調函數,在 onEnd() 中又會執行 compute()。下面用process.nextTick() 改寫上 面的程序:
functiondoSomething(args, callback) {
somethingComplicated(args);
process.nextTick(callback);
}
doSomething(functiononEnd() {
compute();
});
改寫後的程序會把上面耗時的操做拆分爲兩個事件,減小每一個事件的執行時間,提升事 件響應速度。
注意: 不要使用setTimeout(fn,0)代替process.nextTick(callback), 前者比後者效率要低得多。
咱們探討了process對象經常使用的幾個成員,除此以外process還展現了process.platform、 process.pid、process.execPath、process.memoryUsage() 等方法,以及POSIX 進程信號響應機制。有興趣的讀者能夠訪問http://nodejs.org/api/process.html 瞭解詳細 內容。
。。。
console
console 用於提供控制檯標準輸出,它是由Internet Explorer 的JScript 引擎提供的調試 工具,後來逐漸成爲瀏覽器的事實標準。
Node.js 沿用了這個標準,提供與習慣行爲一致的 console 對象,用於向標準輸出流(stdout)或標準錯誤流(stderr)輸出字符。 ? console.log():向標準輸出流打印字符並以換行符結束。
console.log 接受若干 個參數,若是隻有一個參數,則輸出這個參數的字符串形式。若是有多個參數,則 以相似於C 語言 printf() 命令的格式輸出。
第一個參數是一個字符串,若是沒有 參數,只打印一個換行。
console.error():與console.log() 用法相同,只是向標準錯誤流輸出。
console.trace():向標準錯誤流輸出當前的調用棧。html