Closure
- 일급 함수를 이용해서 스코프엔 묶은 변수를 바인딩하기 위한 기술입니다.
- 즉, 함수가 선언할 때 만들어진 scope가 사라진 후에도 호출할 수 있는 함수입니다.
var A = function() {
var a = 1;
var B = function() {
return ++a;
};
**return B;**
};
var outer = A();
console.log(outer()); // 2
console.log(outer()); // 3
- var outer = A()
- A() 실행했으므로 A의 실행컨텍스트는 종료
- outer 변수는 이제 B함수 를 바라보고 있음
- outer()를 호출하면, 즉 B를 호출하는 것이 되고, a의 값이 계속 증가합니다.
- B함수에는 a의 유효범위가 아니기 때문에 더 바깥의 A scope를 참조하고 계속 값이 증가합니다.
메모리 관리
- JS에서 메모리는 Garbage Collector에서 사용하지 않는 변수를 정리합니다.
- 그런데 Closure에서는 의도적으로 변수를 계쏙 사용하기 때문에 메모리를 계속 소모합니다.
- GC가 수집되게 하려면 null이나 undeifined를 할당하면 좋습니다.
Comments