nodejs學習筆記 -- 全域對象與全域變數

來源:互聯網
上載者:User

標籤:console settimeout() setinterval() process

全域對象

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


在Node.js中,我們可以直接存取到global的屬性,而不需要在應用中包含它。


全域變數

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

1、在最外層定義的變數;

2、全域對象的屬性;

3、隱式定義的變數(未定義直接賦值的變數)。


定義一個全域變數時,這個變數同時也會成為全域對象的屬性,反之亦然。需要注 意的是,在 Node.js 中不可能在最外層定義變數,因為所有使用者代碼都是屬於當前模組的, 而模組本身不是最外層上下文。 

注意: 永遠使用 var 定義變數以避免引入全域變數,因為全域變數會汙染 命名空間,提高代碼的耦合風險。



__filename

雙底線filename表示當前正在執行的指令碼的檔案名稱,它將輸出檔案所在位置的絕對路徑。它和命令列參數所指定的檔案名稱不一定相同。 如果在模組中,返回的值是模組檔案的路徑。


例子:建立一個main.js,代碼如下:

// 輸出全域變數 __filename 的值console.log(__filename);


在命令列中執行main.js檔案,如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/8A/0F/wKiom1glNznjtYPGAAAeFtDQr-A661.png" title="QQ20161111111219.png" alt="wKiom1glNznjtYPGAAAeFtDQr-A661.png" />


__dirname

雙底線dirname表示當前執行指令碼所在的目錄


建立一個main.js,代碼如下:

// 輸出全域變數 __dirname 的值console.log(__dirname);


在命令列中執行main.js檔案,如下:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/8A/0B/wKioL1glOS_zWR-DAAAPUKL8TsY907.png" title="QQ20161111112059.png" alt="wKioL1glOS_zWR-DAAAPUKL8TsY907.png" />


setTimeout(cb,ms)

setTimeout(cb,ms)全域函數在指定的毫秒(ms)數後執行執行指定函數(cb)

setTimeout()只執行一次指定函數,返回一個代表定時器的控制代碼值


在main.js中建立如下代碼:

function printHello(){    console.log(‘Hello World!‘);}//2秒後執行printHello函數setTimeout(printHello, 2000);


在命令列中執行main.js檔案,如下:

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/8A/0F/wKiom1glO7KiXme4AAAPvXhBHN0336.png" title="QQ20161111113150.png" alt="wKiom1glO7KiXme4AAAPvXhBHN0336.png" />


clearTimeout(t)

clearTimeout(t)全域函數用於停止一個之前通過setTimeout()建立的定時器

參數t是通過setTimeout()函數建立的定時器


在main.js中建立如下代碼:

function printHello(){    console.log(‘Hello World!‘);}//2秒後執行printHello函數var t = setTimeout(printHello, 2000);//清除定時器clearTimeout(t);


在命令列中執行main.js檔案,如下:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/8A/0F/wKiom1glPQugaTtTAAAQhIYBEcQ758.png" title="QQ20161111113735.png" alt="wKiom1glPQugaTtTAAAQhIYBEcQ758.png" />


setInterval(cb,ms)

setInterval(cb,ms)全域函數在指定的毫秒(ms)數後執行指定函數(cb)

返回一個代表定時器的控制代碼值。可以使用 clearInterval(t) 函數來清除定時器

setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或視窗被關閉


在main.js中建立如下代碼:

function printHello(){    console.log(‘Hello World!‘);}//2秒後執行printHello函數setInterval(printHello, 2000);


在命令列中執行main.js檔案,如下:

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/8A/0C/wKioL1glP6rhv3r5AAAR--dli7Q655.png" title="QQ20161111114741.png" alt="wKioL1glP6rhv3r5AAAR--dli7Q655.png" />


console

console 用於提供控制台標準輸出,它是由 Internet Explorer 的 JScript 引擎提供的調試工具,後來逐漸成為瀏覽器的事實標準。 Node.js 沿用了這個標準,提供與習慣行為一致的 console 對象,用於向標準輸出資料流(stdout)或標準錯誤流(stderr)輸出字元。


以下為 console 對象的方法:

序號                                                            方法&描述
1

console.log([data][, ...])

向標準輸出資料流列印字元並以分行符號結束。該方法接收若干個參數,如果只有一個參數,則輸出這個參數的字串形式。如果有多個參數,則 以類似於C 語言 printf() 命令的格式輸出。

2

console.info([data][, ...])

P該命令的作用是返回資訊性訊息,這個命令與console.log差別並不大,除了在chrome中只會輸出文字外,其餘的會顯示一個藍色的驚歎號。

3

console.error([data][, ...])

輸出錯誤訊息的。控制台在出現錯誤時會顯示是紅色的叉子。

4

console.warn([data][, ...])

輸出警告訊息。控制台出現有黃色的驚歎號。

5

console.dir(obj[, options])

用來對一個對象進行檢查(inspect),並以易於閱讀和列印的格式顯示。

6

console.time(label)

輸出時間,表示計時開始。

7

console.timeEnd(label)

結束時間,表示計時結束。

8

console.trace(message[, ...])

當前執行的代碼在堆棧中的調用路徑,這個測試函數運行很有協助,只要給想測試的函數裡面加入 console.trace 就行了。

9

console.assert(value[, message][, ...])

用於判斷某個運算式或變數是否為真,接手兩個參數,第一個參數是運算式,第二個參數是字串。只有當第一個參數為false,才會輸出第二個參數,否則不會有任何結果。


console.log():向標準輸出資料流列印字元並以分行符號結束。

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

第一個參數是一個字串,如果沒有參數,只列印一個換行。

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/8A/0C/wKioL1glUxLwNFbGAAALaBJBMlI402.png" title="QQ20161111131008.png" alt="wKioL1glUxLwNFbGAAALaBJBMlI402.png" />


console.error():與console.log() 用法相同,只是向標準錯誤流輸出

console.trace():向標準錯誤流輸出當前的


建立一個main.js,代碼如下:

console.info(‘程式開始執行:‘);var counter =10;console.log(‘計數:%‘,counter);console.time(‘擷取資料‘);////  執行一些代碼//console.timeEnd(‘擷取資料‘);console.info(‘程式執行完畢‘);


在命令列中執行main.js檔案,如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/8A/0C/wKioL1glVbHSo1k4AAALMm2DO-Q474.png" title="QQ20161111132246.png" alt="wKioL1glVbHSo1k4AAALMm2DO-Q474.png" />


process

process process 是一個全域變數,即 global 對象的屬性。 

它用於描述當前Node.js 進程狀態的對象,提供了一個與作業系統的簡單介面。通常在你寫本地命令列程式的時候,少不了要 和它打交道。


下面將會介紹 process 對象的一些最常用的成員方法。

序號                                                 事件&描述
1

exit

當進程準備退出時觸發。

2

beforeExit 

當 node 清空事件迴圈,並且沒有其他安排時觸發這個事件。通常來說,當沒有進程安排時 node 退出,但是 ‘beforeExit‘ 的監聽器可以非同步呼叫,這樣 node 就會繼續執行。

3

uncaughtException

當一個異常冒泡回到事件迴圈,觸發這個事件。如果給異常添加了監視器,預設的操作(列印堆疊追蹤資訊並退出)就不會發生。

4

Signal 事件

當進程接收到訊號時就觸發。訊號列表詳見標準的 POSIX 訊號名,如 SIGINT、SIGUSR1 等。


建立一個main.js,代碼如下:

process.on(‘exit‘,function(code){    //以下代碼永遠不會執行    setTimeout(function(){        console.log(‘該代碼不會執行‘);    },0);    console.log(‘結束代碼為:‘,code);});console.log(‘程式執行結束‘);


在命令列中執行main.js檔案,如下:

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/8A/10/wKiom1glW7SzroRkAAAHUziJzfA572.png" title="QQ20161111134823.png" alt="wKiom1glW7SzroRkAAAHUziJzfA572.png" />


更多關於process的介紹,可參考菜鳥教程

http://www.runoob.com/nodejs/nodejs-global-object.html


本文出自 “dapengtalk” 部落格,請務必保留此出處http://dapengtalk.blog.51cto.com/11549574/1871761

nodejs學習筆記 -- 全域對象與全域變數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.