我有以下JS函数:
function checkIfGameAlreadyStarted(){
$.get("IsGameAlreadyStarted",null,function(gameAlreadyStarted){
if (gameAlreadyStarted == "true"){
window.location = "index.jsp?content=game";
} else{
alert("bla");
}
});
}
function joinGame(playerForm){
$.get("GenerateClientID",null,function(clientID){
$.get("JoinGame",{
"NAME" : playerForm.elements[0].value,
"ID" : clientID
}
,function(gameParam){
$("#waitingContainer").append("You have joined the game!<br\>Waiting for game creator to start game..");
setInterval(checkIfGameAlreadyStarted(), 1000);
});
});
}
为什么setInterval
只执行一次checkIfGameAlreadyStarted
,而不是每秒执行一次?
发布于 2011-10-13 05:00:26
您传递的是执行函数的结果,而不是函数本身。由于该函数的结果是未定义的,因此您将执行checkIfGameAlreadyStarted,然后将undefined传递给不做任何事情的setInterval。
而不是这样:
setInterval(checkIfGameAlreadyStarted(), 1000);
你的声明应该是这样的:
setInterval(checkIfGameAlreadyStarted, 1000);
在函数名的末尾不带括号。
当您传递checkIfGameAlreadyStarted()
时,它会立即调用函数并获取它的返回值。当您传递checkIfGameAlreadyStarted
时,它会传递一个对函数的引用,以便setInterval以后可以调用它(这正是您想要的)。
https://stackoverflow.com/questions/7746505
复制相似问题