我正在制作一个node.js游戏服务器,并且我正在使用socket.io作为websockets和房间。 然而,这主要是一个纯粹的 JavaScript 问题:
我正在创建一个房间,每 2 个玩家有一个随机数,它的工作原理如下:
var openRoom = Math.floor(Math.random() * 90000) + 10000;
io.sockets.on('connection', function (socket) {
socket.on('addPlayer', function(username) {
if (io.sockets.clients(openRoom).length <= 2) {
socket.join(openRoom);
} else {
openRoom = Math.floor(Math.random() * 90000) + 10000;
socket.join(openRoom);
}
...
有没有办法不使用全局openRoom
?
最佳答案
您需要使用闭包,以便将 openRoom
变量暴露给内部函数。
例如:
(function() {
var openRoom = Math.floor(Math.random() * 90000) + 10000;
io.sockets.on('connection', function (socket) {
socket.on('addPlayer', function(username) {
if (io.sockets.clients(openRoom).length <= 2) {
socket.join(openRoom);
} else {
openRoom = Math.floor(Math.random() * 90000) + 10000;
socket.join(openRoom);
}
...
})();
您还可以创建一个全局对象来存储任何全局变量:
if (typeof window['MyApp'] == 'undefined') {
MyApp = {
someVar: someValue
};
}
这可以让您稍后获取/设置它:
var x = MyApp.someVar;
关于javascript - 存储数据以供全局访问,无需全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14769590/