2012-05-20 4 views
0

나는이 기능에서 찾고값을 할당하는 방법을

function foo(x) { 
    var tmp = 3; 
    return function (y) { 
    alert(x + y + (++tmp)); 
    } 
} 
var bar = foo(2); // bar is now a closure. 
bar(10); 

내가 그것을 실행할 때, 변수는 얻을 다음 값

X = 2, Y = 10 TMP = 3

이제 foo (2)에서 x가 2로 전달됨을 알 수 있습니다. 따라서 x가 2의 값을 얻는 것을 이해할 수 있습니다. 그러나 bar (10)은 y에 0 값을 할당합니다. 어떻게한다는거야? (10)

답변

2

foo(2)은 하나의 매개 변수 (y)를 허용하는 익명의 함수를 반환한다는 것을 수신 함수가 어떻게 알 수 있는지 혼란 스럽습니다. barfoo(2)의 반환 값으로 설정하면 bar은 해당 익명 함수에 대한 참조가됩니다.

당신이 호출 할 때 그래서, bar(10) 당신은 익명 함수를 foo 수익을 호출하고, 그래서 10은 매개 변수 y로 설정되고있다.

2

이것은 클로저입니다.

당신은 쓸 때 : 실제로 foo를 부르고

var bar = foo(2); 

, 최종 결과가 있도록 :

tmp
var bar = function (y) { 
    alert(2 + y + (++tmp)); 
} 

가 폐쇄에 의해 범위에 바인딩 된 값입니다.

alert(2 + 10 + (++tmp)); 

tmp은 당신이 만든 기능을 호출 할 때마다 증가합니다 :

bar(10); 

는 결과 존재로, 그 기능에 10을 통과 : 연속적으로 호출 그래서

, foo

관련 문제