標籤:圖片 function mod 常用 賦值 參數 local 取資料 rss
Node.js 全域對象
在瀏覽器 JavaScript 中,通常 window 是全域對象, 而 Node.js 中的全域對象是 global,所有全域變數(除了 global 本身以外)都是 global 對象的屬性。
在 Node.js 我們可以直接存取到 global 的屬性,而不需要在應用中包含它。
全域對象與全域變數
global 最根本的作用是作為全域變數的宿主。按照 ECMAScript 的定義,滿足以下條 件的變數是全域變數:
- 在最外層定義的變數;
- 全域對象的屬性;
- 隱式定義的變數(未定義直接賦值的變數)。
當你定義一個全域變數時,這個變數同時也會成為全域對象的屬性,反之亦然。需要注 意的是,在 Node.js 中你不可能在最外層定義變數,因為所有使用者代碼都是屬於當前模組的, 而模組本身不是最外層上下文。
注意: 永遠使用 var 定義變數以避免引入全域變數,因為全域變數會汙染 命名空間,提高代碼的耦合風險。
__filename
__filename 表示當前正在執行的指令碼的檔案名稱。它將輸出檔案所在位置的絕對路徑,且和命令列參數所指定的檔案名稱不一定相同。 如果在模組中,返回的值是模組檔案的路徑。
執行個體
建立檔案 main.js ,代碼如下所示:
// 輸出全域變數 __filename 的值console.log( __filename );
執行 main.js 檔案,代碼如下所示:
$ node main.js/web/com/runoob/nodejs/main.js
__dirname
__dirname 表示當前執行指令碼所在的目錄。
執行個體
建立檔案 main.js ,代碼如下所示:
// 輸出全域變數 __dirname 的值console.log( __dirname );
執行 main.js 檔案,代碼如下所示:
$ node main.js/web/com/runoob/nodejs
setTimeout(cb, ms)
setTimeout(cb, ms) 全域函數在指定的毫秒(ms)數後執行指定函數(cb)。:setTimeout() 只執行一次指定函數。
返回一個代表定時器的控制代碼值。
執行個體
建立檔案 main.js ,代碼如下所示:
function printHello(){ console.log( "Hello, World!");}// 兩秒後執行以上函數setTimeout(printHello, 2000);
執行 main.js 檔案,代碼如下所示:
$ node main.jsHello, World!
clearTimeout(t)
clearTimeout( t ) 全域函數用於停止一個之前通過 setTimeout() 建立的定時器。 參數 t 是通過 setTimeout() 函數建立的定時器。
執行個體
建立檔案 main.js ,代碼如下所示:
function printHello(){ console.log( "Hello, World!");}// 兩秒後執行以上函數var t = setTimeout(printHello, 2000);// 清除定時器clearTimeout(t);
執行 main.js 檔案,代碼如下所示:
$ node main.js
setInterval(cb, ms)
setInterval(cb, ms) 全域函數在指定的毫秒(ms)數後執行指定函數(cb)。
返回一個代表定時器的控制代碼值。可以使用 clearInterval(t) 函數來清除定時器。
setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或視窗被關閉。
執行個體
建立檔案 main.js ,代碼如下所示:
function printHello(){ console.log( "Hello, World!");}// 兩秒後執行以上函數setInterval(printHello, 2000);
執行 main.js 檔案,代碼如下所示:
$ node main.js
Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! ……
以上程式每隔兩秒就會輸出一次"Hello, World!",且會永久執行下去,直到你按下 ctrl + c 按鈕。
console
console 用於提供控制台標準輸出,它是由 Internet Explorer 的 JScript 引擎提供的調試工具,後來逐漸成為瀏覽器的實施標準。
Node.js 沿用了這個標準,提供與習慣行為一致的 console 對象,用於向標準輸出資料流(stdout)或標準錯誤流(stderr)輸出字元。
console 方法
以下為 console 對象的方法:
console.log():向標準輸出資料流列印字元並以分行符號結束。
console.log 接收若干 個參數,如果只有一個參數,則輸出這個參數的字串形式。如果有多個參數,則 以類似於C 語言 printf() 命令的格式輸出。
第一個參數是一個字串,如果沒有 參數,只列印一個換行。
console.log(‘Hello world‘); console.log(‘byvoid%diovyb‘); console.log(‘byvoid%diovyb‘, 1991);
運行結果為:
Hello world byvoid%diovyb byvoid1991iovyb
- console.error():與console.log() 用法相同,只是向標準錯誤流輸出。
- console.trace():向標準錯誤流輸出當前的調用棧。
console.trace();
運行結果為:
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)
執行個體
建立檔案 main.js ,代碼如下所示:
console.info("程式開始執行:");var counter = 10;console.log("計數: %d", counter);console.time("擷取資料");//// 執行一些代碼// console.timeEnd(‘擷取資料‘);console.info("程式執行完畢。")
執行 main.js 檔案,代碼如下所示:
$ node main.js程式開始執行:計數: 10擷取資料: 0ms程式執行完畢
process
process 是一個全域變數,即 global 對象的屬性。
它用於描述當前Node.js 進程狀態的對象,提供了一個與作業系統的簡單介面。通常在你寫本地命令列程式的時候,少不了要 和它打交道。下面將會介紹 process 對象的一些最常用的成員方法。
執行個體
建立檔案 main.js ,代碼如下所示:
process.on(‘exit‘, function(code) { // 以下代碼永遠不會執行 setTimeout(function() { console.log("該代碼不會執行"); }, 0); console.log(‘退出碼為:‘, code);});console.log("程式執行結束");
執行 main.js 檔案,代碼如下所示:
$ node main.js程式執行結束退出碼為: 0
Process 屬性
Process 提供了很多有用的屬性,便於我們更好的控制系統的互動:
執行個體
建立檔案 main.js ,代碼如下所示:
// 輸出到終端process.stdout.write("Hello World!" + "\n");// 通過參數讀取process.argv.forEach(function(val, index, array) { console.log(index + ‘: ‘ + val);});// 擷取執行路徑console.log(process.execPath);// 平台資訊console.log(process.platform);
執行 main.js 檔案,代碼如下所示:
$ node main.jsHello World!0: node1: /web/www/node/main.js/usr/local/node/0.10.36/bin/nodedarwin
執行個體
建立檔案 main.js ,代碼如下所示:
// 輸出目前的目錄console.log(‘目前的目錄: ‘ + process.cwd());// 輸出目前的版本console.log(‘目前的版本: ‘ + process.version);// 輸出記憶體使用量情況console.log(process.memoryUsage());
執行 main.js 檔案,代碼如下所示:
$ node main.js目前的目錄: /web/com/runoob/nodejs目前的版本: v0.10.36{ rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }
摘自:http://www.runoob.com/nodejs/nodejs-global-object.html
Node.js 全域對象