2016-10-26 5 views
0

나는 내가 다음 코드에서 특정 변수 a에 도착하는 방법으로 이해할 수 아니에요 :이 인공 예를 알고덮어 쓰기 된 변수에서 덮어 쓰기 된 변수에 어떻게 액세스해야합니까?

var a = 1; 
console.log(a); 

function local() { 
    var a = 2; 
    console.log(a); 
    function local() { 
    var a = 3; 
    console.log(a); 
    function local() { 
     var a = 4; 
     console.log(a) 
    } 
    local(); 
    } 
    local(); 
} 
local(); 

그러나 나는 대답 :

없이 잠을 갈 수 없어

따라서 어떤 특정 변수를 덮어 쓰기 된 함수에서 얻으려면 어떻게해야합니까? a? 감사합니다. .

+1

함수의 범위 내에서 'var'을 사용하여 선언 된 변수는 해당 함수 범위에 바인딩됩니다. 함수 범위를 벗어나는 변수는 액세스 할 수 없습니다 (반환하지 않는 한) –

+2

"의사 선생님, 이렇게하면 아파요." "그러지 마라." – Quentin

답변

2

상위 범위의 변수와 동일한 이름의 변수를 선언하면 새 선언이 상위 범위 변수를 숨기고 로컬 범위에서 그 상위 범위 변수에 액세스 할 수 없습니다.

이것은 자바 스크립트가 디자인 된 방식입니다. 주위에 마법의 길은 없습니다. 상위 범위의 변수에 액세스하려면 같은 이름의 로컬 변수를 선언하지 마십시오. 다른 이름을 선택하십시오.

변수의 맨 위에있는 변수가 전역 범위에있는 경우 실행중인 환경에 따라 window.a 또는 global.a과 같은 전역 접두어로 해당 변수에 액세스 할 수 있습니다. 그러나 전역 범위에없는 중간 변수는 액세스 할 수 없습니다.

1

var aa=11; 
function my_func(){ 
    var aa=22; 
    alert("local: "+aa+" global: "+window.aa); 
} 

처럼 window 객체에 의해 글로벌 변수에 액세스 할 수 있지만, 그들이 정말로 존재하지 않는 한, 기능 이외의 지역 변수에 접근하는 방법이 없습니다!