Node.js 全局對象

如今介紹 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

相關文章
相關標籤/搜索