2012-06-07 2 views
-2

두 번째 함수 호출 (함수 본문 뒤에 오는)이 본문 내부의 우선 순위보다 우선 순위가 높은 이유를 모르겠습니다.자바 스크립트의 함수 실행 우선 순위

function a(){ 
    var num = 5; 
    console.log(++num); 
    setTimeout(a, 100); 
}; 
setTimeout(a,2000) 
+1

어떤 행동을 기대합니까? – Sirko

+0

"function a() {...}();"라고 써야 했습니까? (최종 괄호에 유의하십시오)? 코드는 최종 행 전에 함수를 호출하지 않습니다. – tsiki

+0

한 통화가 다른 통화를 기다리는 이유를 알고 싶습니다. 그러면 행동을 예측할 수 있습니다. – carousel

답변

4

:가 호출 될 때 setTimeout(a,2000)

  • :없이

    • 이 기능 a를 정의하면 a을 예약하는

    • 2 초 후에 호출 할를 호출

    • 가 호출 될 때, 내 코드는 기본적으로 2 초 100 밀리 초 인용

    후 호출을위한 그 자체를 일정 후 100 밀리 초와 a[*] 일시 정지 행한다. ,

    setTimeout(a, 2000); 
    setTimeout(b, 100); 
    

    음, 가장 가능성이 b가 제 1 및 제 2 라인 사이에 예상치 못한 일시 정지가없는 가정 (먼저 호출됩니다

    그러나 다음과 같은 상황에서 우선 순위가 무엇인지 물어 당신의 상황에 의해 판단 예 : 전체 OS 성능 문제로 인해). 같은 시간 제한을 사용하는 경우

    은 :

    setTimeout(a, 100); 
    setTimeout(b, 100); 
    

    a은 대부분 먼저 호출됩니다. 그러나 나는이 보장된다 생각하고 JS 엔진에 의존하지 않는

    [*] 당신은 유사한 을 달성 할 수있다 (예정된 일정에 대한 엄격한 FIFO 목록을 사용하는지 여부, 내부 클럭 해상도 등 무엇인가) setInterval()을 사용하여 동작.

  • +0

    +1 할 것이지만'setInterval' 부분을 생략 해주십시오. 여기서는 할 일이 거의없고 회전 목마를 혼란스럽게 할 수 있습니다. – MaxArt

    +0

    @MaxArt : 작은 노트로 이동했습니다. 나는 그것이 혼란 스럽다고 생각하지 않지만, 그것이 대본과 아주 관련이 없다는데 동의한다. –

    1

    방금 ​​정의 된 함수 a이 정의되지 않았습니다. 실제로 실행되는 코드 조각은 a이고, 그 다음은 setTimeout(a,2000)입니다. 연대순으로

    0

    나는

    function a() { 
        var num = 5; 
        console.log(++num); 
        setTimeout(a, 100); 
    }; 
    

    는 함수 본문 생각이 후 우리는 요구하고있다. 나는 그것이 계층 구조 문제라고 생각하지 않는다.