2016-10-23 3 views
2

왜 다음 코드는 1이 아닌 10의 결과입니까? return 문이 있더라도 함수 bar()가 값을 변경하지 않는 이유는 무엇입니까? bar의 위에 이동 bar 내부 foo 함수 선언 컴파일 동안 때문에함수에서 함수를 만드는 이유는 무엇입니까?

var foo = 1; 
function bar() { 
    foo = 10; 
    return; 

    function foo() {} 
} 

bar(); 
alert(foo); 

답변

3

function 정의가 해당 범위의 상단에 게양되어 있기 때문이다에서 here, 그래서 bar() 내부의 푸 할당은 실제로 빈 몸을 가지고 로컬 기능을 참조한다.

자세히 알아보기 here

3

이다. 이

var foo = 1; 
function bar() { 
    function foo() {} 
    foo = 10; 
    return; 
} 

bar(); 
alert(foo); 

처럼에 대한 hoisting in JS을 읽어보십시오. 그리고 "VAR 리프팅"섹션

관련 문제