node.js 中低于全局范围的范围

A scope below the global scope in node.js

因此,我是 JS、节点和范围界定的新手。我见过很多人说永远不要使用全局变量,而其他人则说要非常谨慎地使用它们。基本上,我有一个 declares/resets 变量的函数。

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 事件访问它们而无需执行这个?

谢谢!

不,node.js 有一个模块范围。因此,函数之外的每个变量都只是模块范围,而不是全局变量。 (不像客户端浏览器中的 js,其中每个不在函数中的变量都将在全局范围内)

所以,您可以:

var foo,bar;

io.on ....

此外,您可以使用未命名函数定义未命名范围:

(function(){
    var foo,bar;

    io.on ....
})();