2012-04-27 2 views
2

코드의 위치에 상관없이 맨 위에 변수를 정의하는 방법을 배웠습니다. 자바 스크립트가 해석하는 방법입니다.var 내 해석 if 문

var foo = "Bob", 
    car; 

if (2 + 2 === 4) { 
    car = "Blah"; 
} 

내 이해가 정확 :

var foo = "Bob"; 

if (2 + 2 === 4) { 
    var car = "Blah"; 
} 

같이 해석됩니다 : 그래서, 내 이해하는 것이 무엇입니까? 저는 항상 변수 정의를 현재 범위의 맨 위에 위치 시키려고했지만 때로는 그 변수가 if 문 안에서만 필요하기 때문에 외부 변수를 정의하는 것이 약간 이상하게 보입니다. 여전히 최선의 방법입니까?

답변

5

예. var 문장이 게양됩니다 (함수 연습의 최상위에서 사용하는 것이 가장 좋습니다. 함수 범위 대신 블록 범위를 가정하는 사람들의 혼동을 피할 수 있습니다)

4

예. 변수 및 함수 선언은 정의 된 범위의 맨 위에 hoisted입니다. 자바 스크립트는 함수 스코프 (스코프를 차단하지 않음)를 가지고 있기 때문에 예제의 스코프 상단은 if 문 밖에 있습니다.

함수 표현식은 사실 변수 선언이기 때문에 함수 자체는 호이스트되지 않습니다 (할당은 의도 한대로 발생하므로). 즉 ... 그것은 할당 한 후에 만 ​​사용할 수 의미합니다

이 소스에 정의되기 전에 사용할 수있는 함수 선언, 반대로
sayHello(); //Uh-oh... TypeError, undefined is not a function! 
var sayHello = function() { 
    console.log("Hi!"); 
}; 

... :

sayHello(); //"Hi!" 
function sayHello() { 
    console.log("Hi!"); 
} 
1

예, (자바 스크립트는 기능 범위 임) 범위를 정의하는 것이 좋습니다. here.