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
  1. var outer = A()
    1. A() 실행했으므로 A의 실행컨텍스트는 종료
    2. outer 변수는 이제 B함수 를 바라보고 있음
  2. outer()를 호출하면, 즉 B를 호출하는 것이 되고, a의 값이 계속 증가합니다.
    1. B함수에는 a의 유효범위가 아니기 때문에 더 바깥의 A scope를 참조하고 계속 값이 증가합니다.

메모리 관리

  • JS에서 메모리는 Garbage Collector에서 사용하지 않는 변수를 정리합니다.
  • 그런데 Closure에서는 의도적으로 변수를 계쏙 사용하기 때문에 메모리를 계속 소모합니다.
    • GC가 수집되게 하려면 null이나 undeifined를 할당하면 좋습니다.
Last modified: 2022년 02월 22일

Comments

Write a Reply or Comment

Your email address will not be published.