2011-04-25 7 views
0

:javascript (jquery)에서 익명 함수를 호출 할 때 클로저가 어떻게 작동합니까? 이 기능에

var x = { 
    getStuff : function(){ 
    var i = 0; 
    $.getJSON('/url.json', {}, function(data){ 
     $.each(data, function(key,val){ 
      alert(i); 
     });    
    }); 
    }); 
} 

그래서 2 개 JQuery와 통화 (.getJSON, .each)에 대한 선언 된 익명 함수로 인해 폐쇄 부모 기능 (getStuff)에 대한 액세스 권한이 모두 있음을 올바르게 이해하고?

익명 함수가 해당 위치에서 선언되고 있다는 것은 해당 부모의 범위 체인 내에 있으므로 부모 변수에 액세스 할 수 있습니까?

답변

0

익명 함수는 변수 "x"를 제외하고는 해당 이름으로 "getStuff()"자체에 액세스 할 수 없습니다. 그들은 은 익명 함수가 인스턴스화 된 호출에 대해 포함 함수의 로컬 범위를 인스턴스화 할 때 변수 "i"에 액세스하거나 더 정확하게 변수 "i"에 액세스 할 수 있습니다.

"getStuff()"를 호출 할 때마다 자신의 "i"및 고유 한 익명 함수가있는 새로운 로컬 범위가 만들어집니다.

+0

그래서 "i"를 변경하면 리터럴 구문 때문에 "x"변수를 참조하는 모든 객체에서 "i"가 변경됩니다. – James

+1

@James : No - 새 속성 (예 : _i_에 링크 됨)이있는 _new_ _VariableObject_ (VA)가 만들어지는 함수의 실행 컨텍스트를 입력 할 때이 개체는 생성/입력 된 모든 함수의 범위 체인에 배치됩니다. 이 컨텍스트는 _i_의 특정 인스턴스에 대한 액세스 권한을 갖습니다. 그러나 기능이 입력 될 때마다 새 범위가 형성됩니다. –

+0

@James Sean이 위에 쓴 것은 정확합니다. "getStuff()"를 호출 할 때마다 신선한 "i"를 의미하는 새로운 저장소 블록이 할당됩니다. – Pointy

관련 문제