2013-05-24 5 views
7

저는 항상 브라우저가 문자열에 의해 위에서 아래로 문자열에서 JavaScript 코드를 실행한다고 생각해 왔습니다.JavaScript는 정확히 어떻게 해석됩니까?

// 완벽

<script> 
    test(); 
    function test() { alert('test'); } 
</script> 

작동하지만 변수로 함수를 선언하면 그것은 실패 : 그러나 분명히 여기 그렇지 않다 'catch되지 않은 ReferenceError가 : 테스트가 정의되지 않은'

<script> 
    test(); 
    var test = function() { alert('test'); } 
</script> 

그래서 자바 스크립트 엔진은 때때로 위에서 아래로 코드를 실행하지 않습니다. 결국 어떻게 선언 되더라도 기능을 미리로드 할 수 있습니다. 정확히 작동하며 이유는 무엇입니까?

+0

필자는 function() {}이 스코프 상단으로 이동하는 특별한 경우라고 생각합니다. 나는 틀릴 수 있었다. –

+4

* [AST] (http://en.wikipedia.org/wiki/Abstract_syntax_tree)와 같은 것으로 실행되기 전에 완전히 구문 분석됩니다. 이 때문에 소스 아래쪽의 줄에 "구문 오류"가 표시됩니다. – Matt

+0

위로 대답을보십시오 : http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname – viper

답변

9

다음은 함수 및 변수 호이팅의 예입니다. 함수 및 변수 선언이 현재 범위의 맨 위로 이동합니다.

귀하의 예는 내부적으로 변환됩니다

사례 1 :

<script> 
    function test() { alert('test'); } 
    test(); 
</script> 

사례 2 : 당신은 추측 할 수 이것으로부터

<script> 
    var test; 
    test(); 
    test = function() { alert('test'); } 
</script> 

, 그 두 번째 경우 변수 test에서 실행하려고하면 정의되지 않습니다.

관련 문제