概要
在 Node.js 中有两种创建全局变量的方法:
(1)使用 global 对象,
(2)使用 module.export 。
较小的应用使用 global 对象,大型应用使用 module.export。
详细讲解
我们在使用Node.js 的模块时,例如 Express.js ,有时候我们需要创建一些全局变量,用于全局共享,那么该如何做呢?
方法一:使用global 对象
首先,让我们来分析一下这个global 对象。打开终端输入node,再输入"global",看看这个对象到底有些什么。:
$ node>global复制代码
可以看到这是一个庞大的对象!
在一个 Node.js 的进程中,所有的其他对象都是依附在 global 对象上。如果你熟悉浏览器中的 JavaScript 环境,global 对象和 Window 对象相似。
接下来做一些测试:
> global.nameundefined> 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.nametrue> global.nameundefined> GLOBAL.nameundefined> name = "Lihai"'Lihai'> GLOBAL.name'Lihai'> var age = 23undefined> GLOBAL.age23复制代码
①可以看出,GLOBAL 其实是 global 的一个别名。name == global.name == GLOBAL.name
②无论是使用 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.jsGoogle复制代码
注意:引用一个已经引用了另外一个模块的模块,只会创建一个包含前一个模块的引用,这并不意味着会严重增加内存的使用。同时,因为不存在真正的重复包含,模块中所有的初始化函数都不会重复执行一次。
引用文章
感谢先辈和大牛的文章,坚持学习,坚持分享,让代码的未来更广阔!
Global Variables in Node.js