2016-10-12 2 views
-5

나는 W3 학교에서 thissetTimeout() 방법 예제를 발견했으며 설명 할 수없는 것으로 나타났습니다. 예 :왜 setTimeout 트리거가 즉시 발생합니까?

myVar = setTimeout(alertFunc, 3000); 

... 잘 작동합니다. 하지만 변경하면

... 경고가 즉시 트리거됩니다. 왜? 같은 것이 아니어야합니까? 당신이 alertFuncsetTimeout 외부이라고 볼 수있는이에서
aF = alertFunc(); myVar = setTimeout(aF, 3000);

:

+4

괄호 추가시 아무 것도 변경되지 않는 이유는 무엇입니까? 그들은 어떤 종류의 장식이 아니며, "함수 호출"을 의미합니다. –

+2

*이 것을위한 좋은 속임수 표적이 * 있습니다. –

+0

@ T.J.Crowder 하나의 친구를 찾을 수 없습니다. –

답변

6

동일하지 않아야합니까?

아니요, 전혀 아닙니다.

setTimeout(alertFunc, 3000)alertFunc (함수에 대한 참조) 값을 setTimeout으로 전달합니다. setTimeout은 3 초 후에 해당 함수 참조를 저장합니다.

setTimeout(alertFunc(), 3000)즉시alertFunc 호출하고 setTimeout로의 반환 값을 전달합니다. 정확하게 방법 foo(bar())bar을 호출하고 foo에 반환 값을 전달합니다.

+0

"커뮤니티 위키"는 무엇을 의미합니까? – evolutionxbox

+2

@evolutionxbox http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts –

1

myVar = setTimeout(alertFunc(), 3000);는 동일합니다.

2

setTimeout()은 첫 번째 매개 변수로 함수를 받고 두 번째 매개 변수로 시간을 받아들입니다. 함수를 반환하는 함수에 대해서 들어 봤으면 좋겠다. 따라서이 경우 해당 함수를 호출 할 수 있습니다.

어떤 기능에 ()을 추가하는 순간 즉시 호출됩니다. 그래서 당신은 함수를 호출하고 setTimeout에 실행할 아무것도 반환하지 않습니다. 1

setTimeout(myFunc, 3000); 

케이스는 여기에서 3 초 후에 실행 얻을 수있는 함수 자체를 전달하고 있습니다. 2

setTimeout(myFunc(), 3000); 

다음은 함수의 실행 반환 값을 전달하는

케이스 3 초 후 실행하세요.

관련 문제