我在其他地方调用了scoreBoard(),它在函数内部运行console.log,但是它不会进一步进入下一个函数吗?谁能给我一些见识,为什么呢?因为我只想调用socket.on或至少在玩家登录后绘制表格。

var scoreBoard = function(){

 console.log('Gets into here, does not go into the next function');

        socket.on('allScores', function(data){
            console.log('inside');
            var playerScores = data;
            // console.log(playerScores);

            document.write('<table>');
            document.write('<tr> <th>Player</th> <th>Score</th> </tr>');

            for(var i = 0; i < playerScores.length; i++)
            {
            document.write('<tr><td>' + playerScores[i].username + '</td><td>' + playerScores[i].score + '</td></tr>');
            }
            document.write('</table>');
        })
}

这没有运行
console.log('inside');

最佳答案

因为console.log('inside');在事件监听器内部。它不在上一个console.log调用之后将被顺序执行的函数内部。

如果您确定正在生成事件,则仅在调用scoreBoard()函数之前生成该事件。由于您只是将事件监听器附加到该函数中,因此它仅在运行allScores之后才开始监听scoreBoard()事件。

解决方案是将socket.on('allScores', function(data){ ... })部分移到scoreBoard()函数主体外部。

关于javascript - 为什么没有触发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48749658/

10-11 00:39