中易网

如何定义常量在全局范围内nodejs

答案:2  悬赏:50  
解决时间 2021-03-22 14:09
如何定义常量在全局范围内nodejs
最佳答案
1. 定义一些常量,使用闭包,匿名函数实现常量的定义。 例如: var Class = (function() { var UPPER_BOUND = 100;//定义了常量 var Test={}; // 定义了一个静态方法 获取常量的方法 Test.getUPPER_BOUND=function() { return UPPER_BOUND; } re...
全部回答
如果正在使用一系列node模块,或许是一个像express.js一样的框架,突然需要使用几个全局变量。怎样在nodejs里创建全局变量呢? 对此最常见的建议是“不使用‘var’关键字声明一个变量”或“给object对象添加一个变量”或“给object对象添加一个变量”。你会使用哪种方式呢? 首先,让分析下global对象。打开一个终端,启动一个node命令提示界面: [plain] view plain copy print? $ node > 在命令提示界面下看看关于global的所有信息: [plain] view plain copy print? > global 那是一个超级大的对象!事实上,看到了node的核心。所有在node进程里的对象都挂在这个对象上。如果非常熟悉javascript所在的浏览器环境,global对象是等同于window对象。 现在已经指导global对象是声明 [plain] view plain copy print? > global.name undefined > global.name = 'el capitan' > global.name 'el capitan' > global.name 'el capitan' > delete global.name true > global.name undefined > name = 'el capitan' 'el capitan' > global.name 'el capitan' > global.name 'el capitan' > var name = 'sparrow' undefined > global.name 'sparrow' 令人兴奋的观察! global和blobal看起来是一个同一个东西且是一回事。确实,global是global一个别名。 感兴趣的是一个使用还是不使用var关键字声明的变量附加到global对象上。在node里创建一个全局变量的最基本的方式就是通过不使用var关键字声明一个变量。这种做法与使用一个模块(module)略有不同 当启动一个node进程,将会启动一个模块,那么所有的模块将会被包含在它里面,所有模块都共享同一个global对象。应用上面的测试观察结合实际,你就会明白全局变量怎样在node里工作。然而有些轻微的变化,如果使用var关键字声明的变量将会保留在本地模块里;这些声明的变量没有附加到global对象里。 那么现在已经知道”没有使用var关键字声明的变量“,”向global里添加一个变量“,”给global对象添加一个变量“,所有这些都是一回事。 在一个module里全局声明的变量能够被其他任何模块使用它们的名字来引用,没必要从global对象引用它们。但是这不意味这你就可以这样做。为什么呢?请看这样: [plain] view plain copy print? var company = 'yahoo'; console.log(global.company); // 'google' console.log(company); // 'yahoo' 当使用global.company时,知道使用的是全局变量,但是它的备用名字company在module是当作局部变量来使用的。 如果打算在你的node应用里使用全局变量,那么讨论的创建变量方法会工作的很好。然而,请不要过度使用它。话虽如此,还有可以不使用全局对象的替代解决方案吗? 是的,有这么一个,它涉及到module.exports的使用。使用例子来演示: file: main.js [plain] view plain copy print? exports.company = 'google'; var m = require('./mod'); file: mod.js [plain] view plain copy print? var company = require('./main').company; console.log(company); 现在看看执行结果: [plain] view plain copy print? $ node main.js google 这样就实现了,一个其他模块的的变量可以在另外的模块中使用他而没有使用global对象。可以include main.js在其他的module来访问company名字。 注意:引用(include)一个已经被其他模块引用过的模块时,仅仅创建一个指向之前包体的引用,因此这意味着不会极度消耗内存。也因为没有重新创建一个真正的包体,在module里的所有初始化方法没有再执行。 因此,一个包体中,有2钟创建node全局变量的方法,一个是使用global对象,另一个是使用modules.exports。global方法适用小的应用,modules.exprots适用于大的应用。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
融资租赁公司主要做什么业务
2017年北京交通大学计划招生研究生多少名
求助,CAD新人求助邱枫批量打印的详细使用方
福永易力声、乐荣、日立、理光、华丽兴、新丰
国盛证券手续费是多少?怎样降低手续费?
饺子加盟店有多少品牌
OPI的T8O就是它的指甲强化剂怎么涂啊,每天一
亲润哪里有实体店
求(3-1)(3+1)(3²+1)(3³²+1)···(3³²+1
一个女生总是一副嫌弃我的样子但是又总是和我
一个人一直抬头看着天上,别人以为天上有什么
广州的电影院是天河城的好还是高德汇的大地影
诛仙刷战场的最后一个称号是什么?
angelclover中文叫什么?
三角形ABC中,AB=13,BC=10,BC边上的中线AD=12,
推荐资讯
我不到40岁就绝经了,脸的两边长了很多斑块,
哇,我们学校原来有这么多社会人,跟他们比我
成人高考算多少继续教育学分
在手机游戏被错过的天堂中为什么我在留声机下
谁知道第一届全国青运会的金牌是什么材质的?
不知为什么我最近总是想男人,怎么办
装饰石材的质量等级有几级?放射性有几级?怎
北京市 大兴区旧宫镇旧宫有没有公寓出租,公
郑州农科路附近哪有少儿书法教的好的?请朋友
赞美老师的书籍
女方是温江乡村的男方是四川洪雅乡村的请问他
我梦见我家门前右边有四口棺材叠在一起
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?