2014-10-31 4 views
0

자바 스크립트에서 클로저를 이해하려고합니다. 클로저는 함수의 로컬 변수입니다. 함수가 반환 된 후에도 유지됩니다 [reference].자바 스크립트 클로저 - 부모 함수

나는 많은 참고 문헌에서 함수의 종료를 설명 할 때 부모 함수를 고려했다. 그러나 아래 예제에 따르면 함수는 상위 함수의 변수뿐만 아니라 상위 부모 및 상위 변수에도 액세스 할 수 있다고 생각합니다.

내가 옳다고 생각하는지 설명 할 수 있습니까? 은 사전에 감사합니다 ..

test1 = function() { 
    var x = 10; 
    return function(){ 
    alert(++x); 
    }; 
} 

test2 = function() { 
    var x = 10; 
    return function(){ 
    return function(){ 
     alert(++x); 
    } 
    }; 
} 

t1 = test1(); 
t1(); //11 
t1(); //12 
t2 = test2()(); 
t2(); //11 
t2(); //12 
+1

'test1'의 맨 위에 일부 코드가 누락되었다고 생각합니다. –

+2

부모 함수가 변수에 액세스 할 수 있으면 자식도 변수에 액세스 할 수 있습니다. 변수는 * immediate * parent에 명시 적으로 정의되어 있지 않습니다. –

+1

여기서 중요한 것은 변수의 범위 (변수가 정의 된 곳)뿐입니다. 변수가 정의 된 값만큼 액세스 할 수 있습니다. –

답변

1

예, 각각의 범위는 전이의 관계는 부모 범위에 액세스 할 수 있습니다 - 당신의 부모 범위는 당신의 조부모에서 변수에 액세스 할 수 있으며, 변수에 액세스 할 수있는시기 귀하의 부모로부터 귀하의 조부모 (및 그 부모)에게도 접근 할 수 있습니다.

관련 문제