2014-06-20 4 views
5

setTimeout 및 setInterval을 사용하여 주변을 둘러 보았으므로 원하는 방식으로 코드를 실행할 수 없습니다. 내 목표는 3 초마다 한 번 호출하고 10 초 후에 지우는 setInterval을 만드는 것입니다. 그러나 파이어 버그에서 코드를 실행할 때 얻을 수있는 유일한 것은 숫자입니다. 코드를 실행할 때마다 숫자가 증가하기 때문에 setInterval의 ID라고 가정합니다.setTimeout이 너무 빠르게 실행되는 것으로 나타납니다.

var intID = setInterval(function() { 
    console.log("I've been called");},3000); 


setTimeout(clearInterval(intID), 10000); 

답변

14

이 문 :

setTimeout(clearInterval(intID), 10000); 

수단 " '위해 clearInterval'는 변수 'intID'값을 전달하는 함수를 호출하고 함수에 그 반환 값 및 개수 10000 합격 'setTimeout'. "

다른 말로하면, 사용자는 이며, 함수 "clearInterval"을으로 호출 한 다음 반환 된 값을 setTimeout()으로 전달합니다. 당신은하지이 같은 간격 설정하는

setTimeout(function() { clearInterval(intID); }, 10000); 
2

:

대신 setTimeout()에게 함수를 통과

setInterval(console.log("I've been called"), 3000); 

당신이 한 경우, console.log 즉시 호출됩니다를 - 심지어 setInterval에 대한 인수이므로 functi를 호출하기 전에 인수를 평가해야하기 때문에setInterval 전에 그것들을 사용합니다.

그래서 과 같은 시간 초과를 설정하는 이유는 무엇입니까?

setTimeout(clearInterval(intID), 10000); 

위와 똑같은 문제가 발생합니다. 대신 간격을 설정할 때

그냥 당신이했던 것과 같은 일을 :

setTimeout(function() { clearInterval(intID); }, 10000);