2014-09-27 4 views
1

나는 여러 번 폐쇄에 관해 읽었습니다. here.클로저는 정확히 무엇을 의미합니까?

하지만 폐쇄가 무엇을 의미하는지 정확히 알기가 어렵습니다.

  • 변수가 폐쇄 되었습니까?
  • 아니면 함수가 클로저입니까?
  • 아니면 둘 다 폐쇄라고 할 수 있습니까?
+0

@MikeW 네, 정확히 그렇지만 정확히 거기에서 이해할 수 없었습니다. 클로저가 무엇인지 간단히 말해 주시겠습니까? 변수 또는 함수 또는 둘 다? –

+0

링크 된 질문의 맨 위 대답은 종결의 예입니다. 그게 분명하지 않다면 내가 추가 할 수있는 것을 볼 수 없습니다. –

+0

네, 허용 된 대답에서 변수가 클로저라고도 부르기도하고 클로저라고도하는 함수이기 때문에 혼란 스럽지만 일부 사이트 함수는 클로저라고하지만 클로저는 정확히 무엇입니까? –

답변

2

클로저는 변수의 컨테이너이므로 다른 범위에서 호출 된 경우에도 함수가 작성된 범위의 변수에 액세스 할 수 있습니다.

예 :

f 함수가 생성
function a() { 
    // a local variable 
    var x = 42; 
    function f() { 
    // use the local variable 
    return x; 
    } 
    // return the function f 
    return f; 
} 

// call a to get the inner function 
var fx = a(); 
// call the inner function from out here 
var y = fx(); 
// now y contains the 42 that was grabbed from the variable x inside the function 

, 그것은이 생성 된 범위에서 가변 x 포함 그것 클로저를 갖는다. 함수가 전역 범위에서 호출되면 변수 인 x에 여전히 액세스 할 수 있습니다.

당신은 객체의 변수를 바꾸어 폐쇄의 기능을 시뮬레이션하고, 함수가 나중에 사용할 수 있도록 기능과 함께 그것을 보낼 수

:

function a() { 
    // a "closure" 
    var o = { x: 42 }; 
    function f(closure) { 
    // use the "closure" 
    return closure.x; 
    } 
    // return the "closure" and the function f 
    return { f: f, o: o }; 
} 

// call a to get the inner function and the "closure" 
var fx = a(); 
// call the inner function with the "closure" 
var y = fx.f(fx.o); 
// now y contains the 42 that was grabbed from the variable x in the "closure" 

참고 : 폐쇄 어떤 식별자를 포함 첫 번째 예제에서 함수 f의 클로저에는 함수 인 식별자 f도 포함되어 있습니다. 이 함수는 식별자 f이 함수 a에 국한되어 있지만 어디서나 f이라는 이름을 사용하여 자신을 호출 할 수 있습니다.

관련 문제