溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量

發(fā)布時(shí)間:2020-06-03 12:06:58 來(lái)源:網(wǎng)絡(luò) 閱讀:3432 作者:frwupeng517 欄目:web開(kāi)發(fā)

全局對(duì)象

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


在Node.js中,我們可以直接訪問(wèn)到global的屬性,而不需要在應(yīng)用中包含它。


全局變量

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

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

2、全局對(duì)象的屬性;

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


定義一個(gè)全局變量時(shí),這個(gè)變量同時(shí)也會(huì)成為全局對(duì)象的屬性,反之亦然。需要注 意的是,在 Node.js 中不可能在最外層定義變量,因?yàn)樗杏脩?hù)代碼都是屬于當(dāng)前模塊的, 而模塊本身不是最外層上下文。 

注意: 永遠(yuǎn)使用 var 定義變量以避免引入全局變量,因?yàn)槿肿兞繒?huì)污染 命名空間,提高代碼的耦合風(fēng)險(xiǎn)。



__filename

雙下劃線(xiàn)filename表示當(dāng)前正在執(zhí)行的腳本的文件名,它將輸出文件所在位置的絕對(duì)路徑。它和命令行參數(shù)所指定的文件名不一定相同。 如果在模塊中,返回的值是模塊文件的路徑。


例子:創(chuàng)建一個(gè)main.js,代碼如下:

// 輸出全局變量 __filename 的值
console.log(__filename);


在命令行中執(zhí)行main.js文件,截圖如下:

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


__dirname

雙下劃線(xiàn)dirname表示當(dāng)前執(zhí)行腳本所在的目錄


創(chuàng)建一個(gè)main.js,代碼如下:

// 輸出全局變量 __dirname 的值
console.log(__dirname);


在命令行中執(zhí)行main.js文件,截圖如下:

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


setTimeout(cb,ms)

setTimeout(cb,ms)全局函數(shù)在指定的毫秒(ms)數(shù)后執(zhí)行執(zhí)行指定函數(shù)(cb)

setTimeout()只執(zhí)行一次指定函數(shù),返回一個(gè)代表定時(shí)器的句柄值


在main.js中創(chuàng)建如下代碼:

function printHello(){
    console.log('Hello World!');
}
//2秒后執(zhí)行printHello函數(shù)
setTimeout(printHello, 2000);


在命令行中執(zhí)行main.js文件,截圖如下:

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


clearTimeout(t)

clearTimeout(t)全局函數(shù)用于停止一個(gè)之前通過(guò)setTimeout()創(chuàng)建的定時(shí)器

參數(shù)t是通過(guò)setTimeout()函數(shù)創(chuàng)建的定時(shí)器


在main.js中創(chuàng)建如下代碼:

function printHello(){
    console.log('Hello World!');
}
//2秒后執(zhí)行printHello函數(shù)
var t = setTimeout(printHello, 2000);

//清除定時(shí)器
clearTimeout(t);


在命令行中執(zhí)行main.js文件,截圖如下:

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


setInterval(cb,ms)

setInterval(cb,ms)全局函數(shù)在指定的毫秒(ms)數(shù)后執(zhí)行指定函數(shù)(cb)

返回一個(gè)代表定時(shí)器的句柄值。可以使用 clearInterval(t) 函數(shù)來(lái)清除定時(shí)器

setInterval() 方法會(huì)不停地調(diào)用函數(shù),直到 clearInterval() 被調(diào)用或窗口被關(guān)閉


在main.js中創(chuàng)建如下代碼:

function printHello(){
    console.log('Hello World!');
}
//2秒后執(zhí)行printHello函數(shù)
setInterval(printHello, 2000);


在命令行中執(zhí)行main.js文件,截圖如下:

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


console

console 用于提供控制臺(tái)標(biāo)準(zhǔn)輸出,它是由 Internet Explorer 的 JScript 引擎提供的調(diào)試工具,后來(lái)逐漸成為瀏覽器的事實(shí)標(biāo)準(zhǔn)。 Node.js 沿用了這個(gè)標(biāo)準(zhǔn),提供與習(xí)慣行為一致的 console 對(duì)象,用于向標(biāo)準(zhǔn)輸出流(stdout)或標(biāo)準(zhǔn)錯(cuò)誤流(stderr)輸出字符。


以下為 console 對(duì)象的方法:

序號(hào)                                                           方法&描述
1

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

向標(biāo)準(zhǔn)輸出流打印字符并以換行符結(jié)束。該方法接收若干個(gè)參數(shù),如果只有一個(gè)參數(shù),則輸出這個(gè)參數(shù)的字符串形式。如果有多個(gè)參數(shù),則 以類(lèi)似于C 語(yǔ)言 printf() 命令的格式輸出。

2

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

P該命令的作用是返回信息性消息,這個(gè)命令與console.log差別并不大,除了在chrome中只會(huì)輸出文字外,其余的會(huì)顯示一個(gè)藍(lán)色的驚嘆號(hào)。

3

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

輸出錯(cuò)誤消息的??刂婆_(tái)在出現(xiàn)錯(cuò)誤時(shí)會(huì)顯示是紅色的叉子。

4

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

輸出警告消息。控制臺(tái)出現(xiàn)有×××的驚嘆號(hào)。

5

console.dir(obj[, options])

用來(lái)對(duì)一個(gè)對(duì)象進(jìn)行檢查(inspect),并以易于閱讀和打印的格式顯示。

6

console.time(label)

輸出時(shí)間,表示計(jì)時(shí)開(kāi)始。

7

console.timeEnd(label)

結(jié)束時(shí)間,表示計(jì)時(shí)結(jié)束。

8

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

當(dāng)前執(zhí)行的代碼在堆棧中的調(diào)用路徑,這個(gè)測(cè)試函數(shù)運(yùn)行很有幫助,只要給想測(cè)試的函數(shù)里面加入 console.trace 就行了。

9

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

用于判斷某個(gè)表達(dá)式或變量是否為真,接手兩個(gè)參數(shù),第一個(gè)參數(shù)是表達(dá)式,第二個(gè)參數(shù)是字符串。只有當(dāng)?shù)谝粋€(gè)參數(shù)為false,才會(huì)輸出第二個(gè)參數(shù),否則不會(huì)有任何結(jié)果。


console.log():向標(biāo)準(zhǔn)輸出流打印字符并以換行符結(jié)束。

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

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

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


console.error():與console.log() 用法相同,只是向標(biāo)準(zhǔn)錯(cuò)誤流輸出

console.trace():向標(biāo)準(zhǔn)錯(cuò)誤流輸出當(dāng)前的


創(chuàng)建一個(gè)main.js,代碼如下:

console.info('程序開(kāi)始執(zhí)行:');

var counter =10;
console.log('計(jì)數(shù):%',counter);

console.time('獲取數(shù)據(jù)');

//
//  執(zhí)行一些代碼
//

console.timeEnd('獲取數(shù)據(jù)');

console.info('程序執(zhí)行完畢');


在命令行中執(zhí)行main.js文件,截圖如下:

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


process

process process 是一個(gè)全局變量,即 global 對(duì)象的屬性。 

它用于描述當(dāng)前Node.js 進(jìn)程狀態(tài)的對(duì)象,提供了一個(gè)與操作系統(tǒng)的簡(jiǎn)單接口。通常在你寫(xiě)本地命令行程序的時(shí)候,少不了要 和它打交道。


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

序號(hào)                                                事件&描述
1

exit

當(dāng)進(jìn)程準(zhǔn)備退出時(shí)觸發(fā)。

2

beforeExit 

當(dāng) node 清空事件循環(huán),并且沒(méi)有其他安排時(shí)觸發(fā)這個(gè)事件。通常來(lái)說(shuō),當(dāng)沒(méi)有進(jìn)程安排時(shí) node 退出,但是 'beforeExit' 的監(jiān)聽(tīng)器可以異步調(diào)用,這樣 node 就會(huì)繼續(xù)執(zhí)行。

3

uncaughtException

當(dāng)一個(gè)異常冒泡回到事件循環(huán),觸發(fā)這個(gè)事件。如果給異常添加了監(jiān)視器,默認(rèn)的操作(打印堆棧跟蹤信息并退出)就不會(huì)發(fā)生。

4

Signal 事件

當(dāng)進(jìn)程接收到信號(hào)時(shí)就觸發(fā)。信號(hào)列表詳見(jiàn)標(biāo)準(zhǔn)的 POSIX 信號(hào)名,如 SIGINT、SIGUSR1 等。


創(chuàng)建一個(gè)main.js,代碼如下:

process.on('exit',function(code){
    //以下代碼永遠(yuǎn)不會(huì)執(zhí)行
    setTimeout(function(){
        console.log('該代碼不會(huì)執(zhí)行');
    },0);

    console.log('退出代碼為:',code);
});
console.log('程序執(zhí)行結(jié)束');


在命令行中執(zhí)行main.js文件,截圖如下:

nodejs學(xué)習(xí)筆記 -- 全局對(duì)象與全局變量


更多關(guān)于process的介紹,可參考菜鳥(niǎo)教程

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


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI