在 Node.js 中有兩種建立全局變量的方法:html
(1)使用 global 對象,node
(2)使用 module.export 。瀏覽器
較小的應用使用 global 對象,大型應用使用 module.export。
bash
咱們在使用Node.js 的模塊時,例如 Express.js ,有時候咱們須要建立一些全局變量,用於全局共享,那麼該如何作呢?函數
方法一:使用global 對象
首先,讓咱們來分析一下這個global 對象。打開終端輸入node,再輸入"global",看看這個對象到底有些什麼。: 學習
$ node
>global複製代碼
能夠看到這是一個龐大的對象!測試
在一個 Node.js 的進程中,全部的其餘對象都是依附在 global 對象上。若是你熟悉瀏覽器中的 JavaScript 環境,global 對象和 Window 對象類似。ui
接下來作一些測試:spa
> global.name
undefined
> global.name = 'Hello Global'
'Hello Global'
> global.name
'Hello Global'
> GLOBAL.name
'Hello Global'
> (node:14432) [DEP0016] DeprecationWarning: 'GLOBAL' is deprecated, use 'global'
delete global.name
true
> global.name
undefined
> GLOBAL.name
undefined
> name = "Lihai"
'Lihai'
> GLOBAL.name
'Lihai'
> var age = 23
undefined
> GLOBAL.age
23
複製代碼
①能夠看出,GLOBAL 實際上是 global 的一個別名。name == global.name == GLOBAL.name
code
②不管是使用 var 聲明的變量,仍是未使用 var 聲明的變量都添加到了 global 對象上。
③然而,有一點不一樣之處在於,在你建立的模塊中,使用 var 關鍵字聲明的變量只屬於這個模塊,屬於局部變量。那些未使用 var 關鍵字聲明的變量則附加到 global 對象上。
在模塊中全局聲明的變量能夠經過它的變量名直接被任何其餘的模塊引用,而不用經過 global 對象的引用;可是若是在模塊內定義了和全局變量同名的局部變量,訪問全局變量時就要加global了。
以下:
var city = 'nanjing';
console.log(global.city); // 'beijing'
console.log(city); // 'nanjing'
複製代碼
可是,別過分使用全局變量。
方法二:使用module.exports
是的,還有一個方法 —— module.exports,讓我用一個例子來證實:
exports.company = 'Google';
var m = require('./mod');複製代碼
var company = require('./main').company;
console.log(company);複製代碼
如今來看看它怎麼運做的:
$ node main.js
Google複製代碼
注意:引用一個已經引用了另一個模塊的模塊,只會建立一個包含前一個模塊的引用,這並不意味着會嚴重增長內存的使用。同時,由於不存在真正的重複包含,模塊中全部的初始化函數都不會重複執行一次。
感謝先輩和大牛的文章,堅持學習,堅持分享,讓代碼的將來更廣闊!
Global Variables in Node.js www.hacksparrow.com/global-vari…