繁体   English   中英

javascript中的变量和引用如何存储在匿名函数中?

[英]How are variables and references stored in anonymous functions in javascript?

我正在用node.js(带有socket.io)制作服务器,而这个特定问题困扰我的时间最长。 我为套接字连接制作了一个易于扩展的处理程序,以将每个不同的连接路由到一个不同的函数。

... <previous code> ...
var socketHandlers = {
                        'chat':chat.onMessage,
                        'chatNameRequest':chat.onNameRequest,
                        'changeRooms':commands.onPlayerRoomChange,
                        'commandEnter':commands.onCommandEnter
                    };

io.sockets.on('connection', function (socket) {
    console.log("New client connected.");

    // add all handlers to this socket when connected
    for (var handler in socketHandlers) {
        socket.on(handler, function(data) {
            console.log("Resolved handler for " + handler + ", called function " + socketHandlers[handler]);

            // sanitize each handler before sending it to the inner functions
            // leave more specific sanitization for the inner function
            data = valid.cleanData(data);
            socket = valid.cleanSocket(socket);

            // finally send it to the inner functions
            socketHandlers[handler](socket, data);
        });
    }
});

但是,它似乎不起作用。 这是服务器的控制台输出:

   debug - flashsocket received data packet 5:::{"args":{"name":"Timothy"},"name":"chatNameRequest"}
Resolved handler for commandEnter, called function function (socket, data) {
<function contents, etc>

如您所见,程序收到了“ chatNameRequest”请求,但错误地将其路由到“ commandEnter”。 有人可以阐明这里发生的事情吗?

查看console.log输出的内容。 套接字收到消息commandEnter ,并将其路由到正确的处理程序。 发布客户代码?

另外,如Pointy所述,您应该研究.bindhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind ),因为您可能很快就会需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM