클로저 = 여러 함수형 프로그래밍 언어에서 등장하는 보편적인 특성
자바스크립트 고유의 개념이 아니라 ECMAScript 명세에서도 클로저의 정의를 다루지 않음
때문에 다양한 문헌에서 제각각 클로저를 다르게 정의 또는 설명
클로저를 설명하는 문장 자체도 이해하기 어려운 단어가 등장하는 경우가 존재
클로저를 한 문장으로 요약해 설명한 사람들
<aside> ❗
문장만 놓고 이해할 수 있는 사례보다는 그렇지 않은 사례가 더 많음
때문에 의외로 쉬운 개념인데도 부족한 느낌을 받을 수 있는 개념이 클로저
이번 장에서는 클로저의 일반적인 정의로부터 그 의미를 파악하고 다양한 사례를 통해 성질을 살펴본 후, 마지막에 다시 재조합해서 이해하기 쉬운 문장으로 바꿔보는 방식으로 진행
MDN(Mozilla Devaloper Network)에서는 클로저에 대해 “클로저는 함수와 그 함수가 선언될 당시의 lexical environment의 상호 관계에 따른 현상”이라고 소개
선언될 당시의 lexical environment는 2장에서 실행 컨텍스트의 구성 요소 중 하나인 outerEnvironmentReference에 해당
LexicalEnvironment의 environmentRecord와 outerEnvironmentReference에 의해 변수의 유효 범위인 스코프가 결정되고 스코프 체인이 가능하다고 설명
어떤 컨텍스트 A에서 선언한 내부함수 B의 실행 컨텍스트가 활성화된 시점에는 B의 outerEnvironmentReference가 참조하는 대상인 A의 LexicalEnvironment에도 접근이 가능
A에서는 B에서 선언한 변수에 접근할 수 없지만 B에서는 A에서 선언한 변수에 접근이 가능
combination의 뜻을 위에서 알 수 있을 듯
내부함수 B가 A의 LexicalEnvironment를 언제나 사용하는 것은 아님
내부함수에서 외부 변수를 참조하지 않는 경우라면 combination이라고 할 수 없음