2012-06-21 2 views
2

를 작동하는 자바 스크립트의 setTimeout를 가져올 수 없습니다 : 매뉴얼에 따라내가 자바 스크립트의 기능이 제대로

function test(){ 
... 
    if(){ 
     setTimeout(test(), 1000); 
    } 
} 

을, 나는 이것을 호출 할 수 있습니다

setTimeout(test(), 1000); 

사실, 그것은 호출 , 그러나 1s를 기다리지 말라. 그래서 나는 그것을 다음과 같이 사용하려고 노력한다.

setTimeout(function(){test();}, 1000); 

누구나이 설명을 할 수 있습니까?

답변

2

당신은 즉

setTimeout(test(), 1000); 

setTimeout(test, 1000); 

및 NOT으로 호출해야합니다, 당신은 1000 밀리 후 호출 할 함수는 테스트, 테스트를 호출하지 결과입니다!

setTimeout(function(){test();}, 1000); 

작품은 1000MS 후 전화 기능이 기본적으로 test 그 자체 인 테스트 호출하는 함수라는 것이다 이유. 람다 계산법 괴짜를 위해, 그것은 eta-reduction이라고 불린다.

+0

감사합니다. – ferdinandfly

3

어떤 설명서가 있습니까? test()을 호출하면 test()이 반환 한 값을 setTimeout으로 전달하므로 test()이 함수를 반환하지 않으면 작동하지 않습니다.

대체 기능을 사용하거나 ()없이 setTimeout(test, 1000)과 같이 전달할 수 있습니다. 이 eval를 호출에 해당하며이 범위 지정으로 실행하겠습니다으로, 모든 비용

setTimeout("test()", 1000)

피할이 : 당신이 길을 따라 찾을 수 있습니다

또 다른 잘못된 사용과 같은 문자열로 전달하는 것입니다 문제는 조만간에.

1

setTimeout은 함수 참조를 기대합니다. 당신이이를 통과 할 때 : setTimeouttest 함수를 호출의 결과을 통과

setTimeout(test(), 1000); 

. 대신, 자신을 테스트하기 위해 그것을 참조를 전달합니다

setTimeout(test, 1000);

는 화려한 무언가를보고 싶으십니까?

function test() { 
    var what_are_you = 'a closure'; 
    return function() { 
     alert('I am '+what_are_you+'!') 
    } 
} 
setTimeout(test(), 1000); 

여기서는 함수 호출에서 함수 참조를 반환합니다. 그것에 대한 자세한 정보는 아래 기사를 참조하십시오!

문서 MDN에

관련 문제