2011-02-09 10 views
4

다소 기본적인 질문입니다. 무슨 일이 벌어지는 지 알 수 있지만 왜 이런 식으로 작동하는지 이해할 수 없습니다.JavaScript : 함수에서 변수 초기화

a = false; 
var k = function() { 
    console.log(a); 
    var a = true 
    console.log(a); 
}(); 

처음에는 로그에 "false, true"가 있지만 "a"는 읽지 않을 것으로 예상됩니다. 누군가가 이것을 왜하는지 자세히 설명해 주실 수 있습니까?

ps. 나는 내가해야 할 일을 말해주는 대답을 찾고 있지 않다. 나는 자바 스크립트 조각의 내부 동작에 대한 설명을 찾고있다. 사전

답변

10

자바 스크립트 범위 지정이 뭔가라는 방식으로 작동하기 때문이다에서

덕분에 "용이 한". 파서가 자바 스크립트 함수를 읽을 때, 해당 범위 (var 사용) 키워드에 정의 된 모든 변수를 찾습니다 (자바에서 범위의 유일한 유형은 함수 범위라는 것을 기억하십시오). 그런 다음 함수의 맨 위에 놓습니다. 다음과 같이

그래서 파서는 코드를 해석 :

a = false; 
var k = (function() { 
    var a; 
    console.log(a); 
    a = true 
    console.log(a); 
}()); 

(이 구문 오류를 반환하지 않도록 나는 당신의 함수 호출을 해결 한 NB.)

은 분명히이 지금에 a을 설정 먼저 console.log을 수행하기 전에 undefined을 입력하십시오.


As the MDC docs say

:

변수의 모든 정의 정말 그 범위의 상단에있는 변수의 선언과 정의가있는 장소에서 할당입니다.

+0

Aaah .. 호이 스팅 ... 실제로 그것에 대해 생각하고 있었지만 당신은 나를이 해답에 이겼습니다 ... + 1 –