在nodejs中,全局變量有兩個:1、“__filename”, 表示當前正在執(zhí)行的腳本的文件名,可輸出文件所在位置的絕對路徑;2、“__dirname”,表示當前執(zhí)行腳本所在的目錄。
本教程操作環(huán)境:windows7系統(tǒng)、nodejs 12.19.0版,DELL G3電腦。
全局變量:
1)_filename:指向當前運行的腳本文件名。
2)_dirname:指向當前運行的腳本所在的目錄。
__filename
__filename 表示當前正在執(zhí)行的腳本的文件名。它將輸出文件所在位置的絕對路徑,且和命令行參數(shù)所指定的文件名不一定相同。 如果在模塊中,返回的值是模塊文件的路徑。
實例
創(chuàng)建文件 main.js ,代碼如下所示:
// 輸出全局變量 __filename 的值console.log( __filename );
執(zhí)行 main.js 文件,代碼如下所示:
$ node main.js /web/com/runoob/nodejs/main.js
__dirname
__dirname 表示當前執(zhí)行腳本所在的目錄。
實例
創(chuàng)建文件 main.js ,代碼如下所示:
// 輸出全局變量 __dirname 的值console.log( __dirname );
執(zhí)行 main.js 文件,代碼如下所示:
$ node main.js /web/com/runoob/nodejs
全局對象與全局變量:
global 最根本的作用是作為全局變量的宿主。按照 ECMAScript 的定義,滿足以下條 件的變量是全局變量:
在最外層定義的變量;全局對象的屬性;隱式定義的變量(未定義直接賦值的變量)。
當你定義一個全局變量時,這個變量同時也會成為全局對象的屬性,反之亦然。需要注 意的是,在 Node.js 中你不可能在最外層定義變量,因為所有用戶代碼都是屬于當前模塊的, 而模塊本身不是最外層上下文。
準全局變量
模塊內(nèi)部的局部變量,指向的對象根據(jù)模塊不同而不同,但是所有模塊都適用,可以看作是偽全局變量,主要為module, module.exports, exports等。
module變量指代當前模塊。module.exports變量表示當前模塊對外輸出的接口,其他文件加載該模塊,實際上就是讀取module.exports變量。
-
module.id 模塊的識別符,通常是模塊的文件名。
-
module.filename 模塊的文件名。
-
module.loaded 返回一個布爾值,表示模塊是否已經(jīng)完成加載。
-
module.parent 返回使用該模塊的模塊。
-
module.children 返回一個數(shù)組,表示該模塊要用到的其他模塊。
這里需要特別指出的是,exports變量實際上是一個指向module.exports對象的鏈接,等同在每個模塊頭部,有一行這樣的命令。
var exports = module.exports;
這造成的結果是,在對外輸出模塊接口時,可以向exports對象添加方法,但是不能直接將exports變量指向一個函數(shù):
exports.自定義模塊 = function (x){ console.log(x);};
上面這樣的寫法是無效的,因為它切斷了exports與module.exports之間的鏈接。但是,下面這樣寫是可以的。