2016-09-29 4 views
0

나는 javascript를 배우기 위해 eloquentjavascript를 읽었지 만,이 클로저는 나를 혼란스럽게합니다. warp1은 함수가 아니지만 함수처럼 보이며 인수를 취하는 것처럼 보입니다. 클로저 함수는 어떻게 작동합니까? 우리가 그것을 사용할 수있는 이유는 무엇입니까?클로저 기능이 어떻게 작동하는지 이해하지 못합니까?

function wrapValue(n) { 
    var localVariable = n; 

    return function() { return localVariable; }; 
} 

var wrap1 = wrapValue(1); 
var wrap2 = wrapValue(2); 

console.log(wrap1()); 
// → 1 

console.log(wrap2()); 
// → 2 

답변

0

외부 함수 (wrapValue)는 함수를 반환합니다. 따라서 반환 된 함수는 변수 wrap1wrap2에 할당됩니다. 그래서 변수에서 반환 된 함수를 호출 할 수 있습니다.

우리가 다음을 볼 때 더 쉽게 이해할 수 있습니다.

function foo() { return "foo"; } 

또는 당신은 변수에 기능을 할당 할 수 있습니다 :

당신이 그랬던 것처럼 당신은 함수를 만들 수 있습니다

var foo = function() { return "foo"; } 

두 번째 예를 기본적으로 수행 정확히 같은 당신의 폐쇄와 마찬가지로 - 변수에 함수를 할당합니다.

는 모든 경우에, 당신은 변수 또는 함수 이름으로

foo(); 

어느으로 함수를 호출 할 수 있습니다.

관련 문제