2014-01-23 3 views
1

이봐, 난 자바 스크립트 클로저를 이해하고이 코드 조각에 빠른 질문을하기 위해 노력하고있어 모든자바 스크립트 클로저와 내부 범위

var a = 5; 

function woot() { 
    console.log('a == 5 woot: ' + (a == 5).toString()); 

    var a = 6; 

    function test() { 
    console.log('a == 6 test: ' + (a == 6).toString()); 
    } 

    test(); 
} 

console.log('a == 5 outside: ' + (a == 5).toString()); 

woot(); 

console.log('a == 5 end: ' + (a == 5).toString()); 

출력 : 내가

a == 5 outside: true 
a == 5 woot: false 
a == 6 test: true 
a == 5 end: true 

를 기다리고 있었다 모든 출력은 true이지만 a은 의 첫 번째 줄에 undefined입니다. 왜 이런거야?

답변

1

함수 내에서 변수를 선언하면 모든 변수 선언이 함수의 맨 위로 이동하므로 변수가 해당 함수의 로컬이됩니다. 당신이 할당하기 전에 귀하의 경우에는

,

console.log('a == 5 woot: ' + (a == 5).toString()); 

    var a = 6; 

6a에, aundefined을 수 있지만 범위는 지역이 될 것입니다.

가변 호이 스팅 예제는 MDN docs에서 읽을 수 있습니다.

와 동일한 MDN var doc

,

VAR로 선언 된 변수의 범위는

1

var 게양 된 클로징 함수이다.

console.log 문 아래에 표시 되더라도 var a = 6;console.log 문을 실행하기 전에 함수 범위에 로컬 변수를 만듭니다.

(해당 줄에 도달 할 때까지 값을 할당하지 않습니다). 당신이 먼저 말에 변수를 선언 할 경우에도 다음 methods..hence을 처리 한 후 변수를 초기화하고 자바 스크립트 엔진 자바 스크립트에서 변수를 선언 할 때마다

What is hoisted?

0

, 자바 스크립트 엔진은 먼저 처리합니다.