2011-10-12 3 views
17

I가 다음 JS 기능 :JS에서는 setInterval은 실행 한 번만

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을 실행하고, 매 초마다하지 않는 이유는 무엇입니까?

답변

56

함수 자체 대신 함수를 실행 한 결과가 전달됩니다. 함수의 결과는 정의되어 있지 않으므로 checkIfGameAlreadyStarted를 실행 한 다음 undefined를 setInterval에 전달하여 아무 것도하지 않습니다. 대신이의

:

setInterval(checkIfGameAlreadyStarted(), 1000); 

귀하의 성명이 있어야한다 : 함수 이름의 끝에 괄호없이

setInterval(checkIfGameAlreadyStarted, 1000); 

.

checkIfGameAlreadyStarted()을 전달하면 함수를 즉시 호출하고 반환 값을 얻습니다. 함수에 대한 참조를 전달하는 checkIfGameAlreadyStarted을 전달하면 setInterval은 나중에 호출 할 수 있습니다 (원하는 내용).

관련 문제