javascript - 存储数据以供全局访问,无需全局变量

标签 javascript socket.io

我正在制作一个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/

    相关文章:

    javascript - 处理javascript函数中的无参数

    javascript - 如何维护 socket.io + node.js 中的当前事件套接字?

    node.js - 套接字 : How to handle/manage multiple clients requests and responses?

    javascript - HTML5 Canvas 高宽100%扭曲游戏动画

    javascript - 时间到期时使用 Javascript 播放音频/声音在 Android 和 IOS 上不起作用

    javascript - 如何使 addEventListener 'click' 在具有相同类的两个菜单项上工作

    node.js - socket.emit 不向发送者发送消息

    Python webapp 无法在 Heroku 上正常运行?

    node.js - NodeJS 连接到另一台服务器上的 wss

    javascript - 有没有办法强制 Firefox 重新显示标题/工具提示?