多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2

nodejs教程

Node.js 全局對象

閱讀 (2316)

Node.js 全局對象

JavaScript 中有一個特殊的對象,稱為全局對象(Global Object),它及其所有屬性都可 以在程序的任何地方訪問,即全局變量。

在瀏覽器JavaScript 中,通常window 是全局對象, 而Node.js 中的全局對象是 global,所有全局變量(除了 global 本身以外)都是 global 對象的屬性。

我們在Node.js 中能夠直接訪問到對象通常都是 global 的屬性,如 console、process 等,下面逐一介紹。


全局對象與全局變量

global 最根本的作用是作為全局變量的宿主。按照ECMAScript 的定義,滿足以下條 件的變量是全局變量:

  • 在最外層定義的變量;
  • 全局對象的屬性;
  • 隱式定義的變量(未定義直接賦值的變量)。

當(dāng)你定義一個全局變量時,這個變量同時也會成為全局對象的屬性,反之亦然。需要注 意的是,在Node.js 中你不可能在最外層定義變量,因為所有用戶代碼都是屬于當(dāng)前模塊的, 而模塊本身不是最外層上下文。

注意: 永遠(yuǎn)使用var 定義變量以避免引入全局變量,因為全局變量會污染 命名空間,提高代碼的耦合風(fēng)險。


process

process 是一個全局變量,即 global 對象的屬性。

它用于描述當(dāng)前Node.js 進(jìn)程狀態(tài) 的對象,提供了一個與操作系統(tǒng)的簡單接口。通常在你寫本地命令行程序的時候,少不了要 和它打交道。下面將會介紹process 對象的一些最常用的成員方法。

process.argv是命令行參數(shù)數(shù)組,第一個元素是 node,第二個元素是腳本文件名, 從第三個元素開始每個元素是一個運(yùn)行參數(shù)。

console.log(process.argv); 

將以上代碼存儲為argv.js,通過以下命令運(yùn)行:

$ node argv.js 1991 name=byvoid --v "Carbo Kuo" 
[ 'node', 
'/home/byvoid/argv.js', 
'1991', 
'name=byvoid', 
'--v', 
'Carbo Kuo' ]
  • process.stdout是標(biāo)準(zhǔn)輸出流,通常我們使用的 console.log() 向標(biāo)準(zhǔn)輸出打印 字符,而 process.stdout.write() 函數(shù)提供了更底層的接口。
  • process.stdin是標(biāo)準(zhǔn)輸入流,初始時它是被暫停的,要想從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù), 你必須恢復(fù)流,并手動編寫流的事件響應(yīng)函數(shù)。
  • process.stdin.resume(); 
    process.stdin.on('data', function(data) { 
    process.stdout.write('read from console: ' + data.toString()); 
    }); 
    
  • process.nextTick(callback)的功能是為事件循環(huán)設(shè)置一項任務(wù),Node.js 會在 下次事件循環(huán)調(diào)響應(yīng)時調(diào)用 callback。

初學(xué)者很可能不理解這個函數(shù)的作用,有什么任務(wù)不能在當(dāng)下執(zhí)行完,需要交給下次事 件循環(huán)響應(yīng)來做呢?

我們討論過,Node.js 適合I/O 密集型的應(yīng)用,而不是計算密集型的應(yīng)用, 因為一個Node.js 進(jìn)程只有一個線程,因此在任何時刻都只有一個事件在執(zhí)行。

如果這個事 件占用大量的CPU 時間,執(zhí)行事件循環(huán)中的下一個事件就需要等待很久,因此Node.js 的一 個編程原則就是盡量縮短每個事件的執(zhí)行時間。process.nextTick() 提供了一個這樣的 工具,可以把復(fù)雜的工作拆散,變成一個個較小的事件。

functiondoSomething(args, callback) { 
  somethingComplicated(args); 
  callback(); 
} 
doSomething(functiononEnd() { 
  compute(); 
}); 

我們假設(shè)compute() 和somethingComplicated() 是兩個較為耗時的函數(shù),以上 的程序在調(diào)用 doSomething() 時會先執(zhí)行somethingComplicated(),然后立即調(diào)用 回調(diào)函數(shù),在 onEnd() 中又會執(zhí)行 compute()。下面用process.nextTick() 改寫上 面的程序:

functiondoSomething(args, callback) { 
   somethingComplicated(args); 
  process.nextTick(callback); 
} 
doSomething(functiononEnd() { 
  compute(); 
}); 

改寫后的程序會把上面耗時的操作拆分為兩個事件,減少每個事件的執(zhí)行時間,提高事 件響應(yīng)速度。

注意: 不要使用setTimeout(fn,0)代替process.nextTick(callback), 前者比后者效率要低得多。

我們探討了process對象常用的幾個成員,除此之外process還展示了process.platform、 process.pid、process.execPath、process.memoryUsage() 等方法,以及POSIX 進(jìn)程信號響應(yīng)機(jī)制。有興趣的讀者可以訪問http://nodejs.org/api/process.html 了解詳細(xì) 內(nèi)容。


console

console 用于提供控制臺標(biāo)準(zhǔn)輸出,它是由Internet Explorer 的JScript 引擎提供的調(diào)試 工具,后來逐漸成為瀏覽器的事實標(biāo)準(zhǔn)。

Node.js 沿用了這個標(biāo)準(zhǔn),提供與習(xí)慣行為一致的 console 對象,用于向標(biāo)準(zhǔn)輸出流(stdout)或標(biāo)準(zhǔn)錯誤流(stderr)輸出字符。 ? console.log():向標(biāo)準(zhǔn)輸出流打印字符并以換行符結(jié)束。

console.log 接受若干 個參數(shù),如果只有一個參數(shù),則輸出這個參數(shù)的字符串形式。如果有多個參數(shù),則 以類似于C 語言 printf() 命令的格式輸出。

第一個參數(shù)是一個字符串,如果沒有 參數(shù),只打印一個換行。

console.log('Hello world'); 
console.log('byvoid%diovyb'); 
console.log('byvoid%diovyb', 1991); 

運(yùn)行結(jié)果為:

Hello world 
byvoid%diovyb 
byvoid1991iovyb 
  • console.error():與console.log() 用法相同,只是向標(biāo)準(zhǔn)錯誤流輸出。
  • console.trace():向標(biāo)準(zhǔn)錯誤流輸出當(dāng)前的調(diào)用棧。
console.trace();

運(yùn)行結(jié)果為:

Trace: 
at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) 
at Module._compile (module.js:441:26) 
at Object..js (module.js:459:10) 
at Module.load (module.js:348:31) 
at Function._load (module.js:308:12) 
at Array.0 (module.js:479:10) 
at EventEmitter._tickCallback (node.js:192:40)
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲最大视频网 | 亚洲欧美日韩小说 | 春意午夜影院 | 福利二区 | 欧美日韩国产超高清免费看片 | 性色aⅴ闺蜜一区二区三区 性色aⅴ在线观看swag | www视频网站 | 波多野结衣一区二区三区88 | 亚洲都市春色系列小说类型 | 亚洲欧美综合一区二区三区四区 | 亚洲一级在线观看 | 久久丝袜精品综合网站 | 亚洲欧洲国产成人精品 | 免费在线观看a | 欧美亚洲另类一区中文字幕 | 2020自拍偷区亚洲综合图片 | 亚洲天堂成人网 | 国产欧美综合在线 | 乱码中文在线观看 | 性欧美video另类3d | 亚洲一区二区三区久久久久 | 亚洲国产日韩欧美在线a乱码 | 亚洲韩精品欧美一区二区三区 | 国产精品一区二区三区四区五区 | 最近在线更新中文字幕3 | 韩国欧美| 免费看黄在线网站 | 亚洲欧美日韩精品 | 级毛片久久久毛片精品毛片 | 乱码中文在线观看 | 岛国午夜 | 国内一区 | 亚洲高清国产一区二区三区 | 欧美videos粗暴 | 欧美精品videos| 日本高清www午夜视频 | 五月天视频网 | 亚洲an天堂an在线观看 | 羞羞在线| 免费永久国产在线视频 | 毛片免费网址 |