在 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…