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