我是FE,也是Fe

前端来源于不断的点滴积累。我一直在努力。

统计

留言簿(15)

阅读排行榜

评论排行榜

nodejs中全局变量&global对象

作为一个javascript初学者,都在不知不觉的使用全局变量,用了许久之后,前辈告诉我们不要用去全局变量,然后想尽办法不使用全局变量,使用模块化的思路去解决问题。

但是到了nodejs中来,模块的全局变量只能在模块用,不能拿到外面去用,当然这是非常好设计,作为天生就能模块化的封装,还能有效的隔离各个模块的耦合,符合我对模块化的期待。事实上在nodejs的实现代码中发现,require一个模块是一个沙箱中执行,简单的想就是在一个毕包里面执行的,这样,沙箱外面是无法访问到。

但是在翻阅nodejs的文档时,发现有一个global对象,可以用于定义整个runtime时期的全局变量。还是罪恶的来看看怎么使用吧。

module1.js:
module.exports={};
//耻辱的使用了全局变量
global.varA = "abc";

main.js:
var c = require("./calculator");
console.log(global.varA);
//使用global对象访问到"全局"变量

非常丑陋的代码,很好的反面教材,事实上,在我学习从全局变量转向的模块化防止各种全局变量的过程中,我通常使用的是这儿一种方法:
module.exports = (function(){
    
var _value = 1;//在函数内声明一个变量,作用域是函数内

    
return function(){ //返回的一个function能访问到_value,所以_value并不是global级别的变量,但是可以通过这个接口访问到
        return _value++;
    };

})();
//一个立即执行的匿名函数

main.js:
var c = require("./module1");

console.log(c());
//1
console.log(c());//2

一个很好的技巧,从web中的js环境到nodejs环境,屡试不爽。

关于global对象,实际使用中可以省去global. 他是默认的根作用域,相当于web环境中的window对象。

global 对象有几个挺有用的属性:

 

console.log(__dirname);//当前路径
console.log(__filename);//当前在执行的js文件路径
//
global.process 获取当前的Process实例

 


global对象的文档:http://nodejs.org/api/globals.html

posted on 2012-10-27 22:29 衡锋 阅读(34142) 评论(2)  编辑  收藏 所属分类: javascriptnodejs

评论

# re: nodejs中全局变量&global对象 2013-03-05 12:36 nonocast

global是有道理的,呵呵,实践1k代码你就明白了  回复  更多评论   

# re: nodejs中全局变量&global对象 2014-11-16 15:22 sanshizi

比如在编写web后台程序的时候, 一个web服务器需要共享数据库连接, 各种缓存等,很需要全局变量  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: