2014-04-22 4 views
1

현재 결과가 정의되지 않은 상태이며 그 이유를 이해할 수 없습니다.이 변수의 기본값은 "top-level"입니까?

var variable = "top-level"; 

function parentFunction() { 
    function childFunction() { 
    alert(variable); 
    } 
    childFunction(); 
    var variable = "local"; 
} 

parentFunction(); 

은 내가 childFunction()를 호출 한 후 나는 변수

var variable = "local"; 

를 선언하기 때문에,이 범위 체인을 조회하고 대신 최상위 변수를 얻을 수 있지만,이 ISN 것 같다 것이라고 생각 사건이 아니야.

+0

가능한 복제본 [JavaScript 'hoisting] (http://stackoverflow.com/questions/15311158/javascript-hoisting) – thefourtheye

답변

1

hoisting은 모든 var 문을 함수의 맨 위에두고 있지만 여전히 만들어진 행에서 할당 문을 실행합니다. 아래를 보면 두 번째 var variable은 같은 이름의 로컬 변수를 선언하기 때문에 전역 변수를 섀도우하게 만듭니다. 그런 다음이 새로 선언 된 변수는 할당 선에 도달 할 때까지 undefined이됩니다.

기본적으로, 여기에 코드가하는 작업은 다음과 같습니다

var variable = "top-level"; 

function parentFunction() { 
    var variable; 
    function childFunction() { 
    alert(variable); 
    } 
    childFunction(); 

    variable = 'local'; 

} 

parentFunction(); 
1

모든 변수 선언 문이 선언 된 함수의 상단으로 이동합니다,하지만 값이이 값에만 할당됩니다 컨트롤은 선언/초기화 문에 도달합니다. 귀하의 경우 childFunction에는 variable이 없으므로 범위에서 올라가서 을 확인합니다. 여기서 variable은 선언되었지만 아직 값이 지정되지 않았습니다. 따라서 기본값 인 undefined을 경고합니다.

이것은 가변 호이 스팅 (variable hoisting)이라고합니다.

+0

+1 감사합니다. 그것에 대해 알지 못했습니다. –

관련 문제