javascript - closure
closure
- 외부 함수의 변수를 사용할 수 있는 내부함수
- scope chain으로 표현되기도 함
- 보통 함수를 리턴하여 사용
- return하는 내부함수를 closure 함수라고 지칭함
function outer() {
    var outerVar = 'outer fn variable ';
    console.log(outerVar);
    function inner() {
        var innerVar = 'inner fn variable ';
        console.log(outerVar + innerVar);
    }
    return inner;
}
outer(); 
/*
outer fn variable
inner() { ... }
 */
outer()(); // outer fn variable inner fn variable
var innerFn = outer();
innerFn(); // outer fn variable inner fn variable
closure가 가지는 세가지 scope chain
- 
    - closure 자신에 대한 접근(closure function 내에 정의된 변수)
 
- 
    - 외부 함수의 변수에 대한 접근
 
- 
    - 전역 변수에 대한 접근
 
currying
- 클로저가 저장된 파라미터를 사용하므로 템플릿함수를 만들고자 할 때 유용
/* without currying */
function add(x, y) {
    return x + y;
}
add(2, 3); // 5
/* with currying */
function add(x) {
    return function(y) {
        return x + y;
    }
}
add(2)(3); // 5
 
  