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

    1. closure 자신에 대한 접근(closure function 내에 정의된 변수)
    1. 외부 함수의 변수에 대한 접근
    1. 전역 변수에 대한 접근

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