2016-07-07 5 views
2

"setTimeout"기능으로 놀고있었습니다. 이 코드는 예상대로 실행됩니다 :setTimeout (myFunction, 5000); 대 setTimeout (myFunction(), 5000);

function myFunction() { 
    console.log('test'); 
    setTimeout(myFunction, 1000); 
} 
myFunction(); 

콘솔에 매 초 '테스트'가 인쇄됩니다.

그러나이 코드 타임 아웃이 기다리고되지 실행할 때 :

function myFunction() { 
    console.log('test'); 
    setTimeout(myFunction(), 1000); 
} 
myFunction(); 

을 그리고 그것은 '테스트'내 콘솔을 스팸 메일.

유일한 차이점은 myFunction() 호출의 대괄호입니다. 왜 이런 일이 일어나는 걸까요? 괄호를 포함하여 당신이 기능을 실행하고 setTimeout에 그 결과을 통과 사실이기 때문이다

+1

두 번째 버전은 'myFunction()'이 함수를 반환하는 경우에만 의미가 있습니다. – ftor

+0

또는 유효 함수 invokation으로 평가 될 수있는 문자열을 반환합니다 :'const f =() => "console.log (123)"; setTimeout (f(), 1000); – ftor

답변

3

myFunction() 함수를 즉시 호출 나중에 호출 될 setTimeout로 반환 값을 전달 (반환 값 이외에는 무의미하므로 함수 (또는 문자열)하지 않다 undefined이다).

2

setTimeout(myFunction(), 1000);은 myFunction()이 반환 한 패스 결과가 setTimeout의 첫 번째 인수임을 의미합니다. myFunction은 아무것도 반환하지 않으므로 setTimeout(myFunction(), 1000);setTimeout(undefined, 1000);과 같습니다.