클로저라는 현상은 런타임 중에 루틴을 만들 수 있는 언어
고차 함수를 위해 컨텍스트를 메모리에 남겨두어서 다시 참조할 수 있게
흔히 함수 내에서 함수를 정의하고 사용하면 클로저라고 한다
하지만 대개는 정의한 함수를 리턴하고 사용은 바깥에서 하게된다
MDN에서는 클로저를 다음과 같이 정의하고 있다.
루틴(함수)이 생겼을 때, 자유변수가 존재할 수 있는데, 루틴이 그 자유 변수를 참조할 수 있다. 참조하면 해지를 못시킨다. free variables closure. 짧게 말해 closure이다.
JS는 중첩되어 있는 클로저 영역을 마구마구 생성할 수 있다. 중괄호를 계속 반복해서 쳐도 클로져가 만들어진다.
메인 플로우에 변수 a가 있다. 근데 블록 스코프안에 또 a가 있다. 근데 루틴안에 또 a가 있다. 이런걸 shadowing이라고 한다.
closure를 이용한 은닉화
shadowing은 언제 쓰는 걸까?
⇒ 네임스페이스를 정의할 때 쓰는 것이다. 이 이름이 내부쪽에서 사용될 때 바깥쪽 자유변수를 오염시키지 않게 하기 위함이다
일종의 바인딩이라 해제필요
클로저는 독립적인 (자유) 변수를 가리키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 ‘기억한다’.