Socket.IO手动“断开”和var范围发射?

有人可以解释如何脱节工程?

在我的控制台日志中,断开连接function在客户端离开游戏时被调用两次。 为什么是这样? 当它发生时,似乎playerName的范围在第二个调用中也是已知的,但不是第一个。 这是打这些电话的客户吗? 另外,它如何知道该范围内的playerName,但在send-message它不知道什么是playerName? (1是playerName)

 Oct 06 11:57:36 overwatchtracker app/web.1: [RECV] Player disconnected: 1 Oct 06 11:57:36 overwatchtracker app/web.1: [RECV] Player disconnected: undefined Oct 06 11:57:29 overwatchtracker app/web.1: [RECV] Message: undefined asdfasdf 

这是我的一些代码:

 const io = socketIO(server) var clients = [] io.on('connection', (socket) => { var playerName; socket.on('login-user', (name) => { playerName = name }) socket.on('send-message', (message) => { socket.broadcast.emit('send-message', playerName, message) }) socket.on('disconnect', () => { socket.broadcast.emit('player-disconnected', playerName) for (var i = 0; i < clients.length; i++) { if (clients[i].name == playerName) { clients.splice(i, 1) } } }) )}