[前端] 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实例
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值