2017-10-10 1 views
0

outerfunc를 호출 한 후 대답의 가치가 무엇인지 궁금합니다. 그 뒤에있는 추론에 특히 관심이 있습니다 (예 : innerfunc의 반환 값이 전역 범위의 var x에 저장된 값을 대체하지 않음). 감사합니다.결과 값은 무엇입니까?

var x = 10; 

function outerfunc() { 
    x = 20; 
    function innerfunc() { 
    var x = x + 20; 
    return x; 
    } 
    innerfunc(); 
} 

outerfunc(); 

var answer = x; 
+0

당신은 단지 그것을 시도 할 수보기 좋아하지만 즉시 innerfunc가 호출되는대로, 왜 innerfunc wouldnt가 – Thilo

답변

1

Re 내부 범위 함수의 반환 값이 전역 범위의 var x에 저장된 값을 대체하지 않는 이유는 무엇입니까?

innerfunc 안에 x라는 새 var를 작성했기 때문에. var x = x + 20 행에서 var를 제거해보십시오.

+0

가장 가까운 X에서 찾기 시작 관측자,이 경우 x = 20? – JeroenT

+0

innerfunc 내부의 var 문을 사용하면 innerfunc의 범위 내에있는 x라는 새 변수를 만들 수 있습니다. 이 코드는 innerfunc 외부를 검색 할 필요가 없습니다. 즉, 두 개의 완전히 다른 변수를 만들었습니다. 당신이 볼 수있는 혼란은 둘 다 똑같은 이름을 지었기 때문입니다. 제안 된대로 var라는 단어를 제거하면 innerfunc는 x의 외부 범위 인스턴스를 찾아야합니다. –

+0

알았습니다! 슈퍼 크리스, 고마워. – JeroenT

0

전역 변수와 동일한 이름을 가진 로컬 변수를 선언하면 해당 함수에서 전역 변수가 보이지 않게됩니다.

function innerfunc() { 
    var x = x + 20; // here there is no global x. so it is NaN 
    return x; 
} 

...이

var x = 10; 
 

 
function outerfunc() { 
 
x = 20; 
 
function innerfunc() { 
 
    var x = x + 20; 
 
    alert("value of x in innerFun " + x); 
 
} 
 
innerfunc(); 
 
} 
 
outerfunc(); 
 
alert("global value of x is " + x);