2016-02-21 68 views
0

我是新来的JS,节点,作用域结果。我看到很多人说永远不会使用全局变量,而其他人会说非常谨慎地使用它们。基本上,我有一个函数声明/重置变量。低于全球范围的范围中的node.js

function resetStuff(){ 
    var foo = ''; 
    var bar = false; 
    ... 
} 

和一个socket.io处理程序。

io.on('connection', function(socket){ 
    socket.on('event1', function (data){ 
     if (foo == 'bar') { 
      doStuff() 
     } 
    }); 
}); 

对我来说,好像我要搬迁foobar到全球范围内,但有什么办法给socket.io事件访问他们不这样做呢?

谢谢!

回答

1

没有,Node.js的具有模块范围。所以,函数之外的每个变量只是模块范围,而不是全局。 (不喜欢在客户端浏览器,JS那里不在函数的每个变量将在全球范围内)

所以,你可以:

var foo,bar; 

io.on .... 

而且,你可以使用匿名函数定义unamed范围:

(function(){ 
    var foo,bar; 

    io.on .... 
})(); 
+0

感谢您的答复。我可以在模块范围中声明变量,然后从重置函数和io事件访问它们吗?我认为这将解决我的问题。 – Radeon348

+1

@ Radon348是的。但随着你的模块变大,这些变量可能会变成非托管,可能会导致错误,我建议你把这些代码放在一个未命名的范围内。 – lovespring