我是JS,节点和作用域的新手。我见过很多人说永远不会使用全球变量而其他人说要极其谨慎地使用它们。基本上,我有一个声明/重置变量的函数。
function resetStuff(){
var foo = '';
var bar = false;
...
}
和一个socket.io处理程序。
io.on('connection', function(socket){
socket.on('event1', function (data){
if (foo == 'bar') {
doStuff()
}
});
});
对我而言,似乎我必须将foo
和bar
移动到全局范围,但有没有办法让socket.io事件访问它们而不执行此操作?
谢谢!
答案 0 :(得分:1)
不,node.js有一个模块范围。所以,函数外的每个变量只是模块范围,而不是全局。 (不像客户端浏览器中的js,其中函数中没有的每个变量都在全局范围内)
所以,你可以:
Eccm(data)
此外,您可以使用未命名的函数定义一个已命名的范围:
var foo,bar;
io.on ....