모던 자바스크립트 딥다이브 스터디 #5-1 (CH 24 클로저)
클로저는 실행컨텍스트를 이해하면 이해가 쉽다…
기본적으로 MDN에서는 클로저를 다음과같이 정의한다.
A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment).
In other words, a closure gives you access to an outer function's scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.
- 클로저는 어떤 함수와 그 함수의 외부 렉시컬 환경 참조의 묶음 조합이다.
- 클로저는 내부 함수에게 외부 함수 스코프에 대한 권한을 준다.
- JS에서는 함수가 생성될때마다, 함수 생성때 클로저도 생성된다.
함수가 선언된 렉시컬 환경이란 무엇일까?
JS엔진은 함수를 어디서 호출했는지가 아니라, 어디에 정의했는지에 따라 상위 스코프를 결정한다. 이를 렉시컬 스코프(정적 스코프)라고 한다.
💡 이는 전에 실행컨텍스트를 다루는 내용에서 배운 바 있다.
외부 렉시컬 환경에 대한 참조 결정
이 렉시컬 환경은 자신의 “외부 렉시컬 환경에 대한 참조”를 통해 상위 렉시컬 환경과 연결되고, 이것이 스코프 체인의 실체이다.
이제서야 이런 이야기를 하다니… 그동안 마치 스코프가 어떤 object인것처럼 설명하고! 이건 이 책에서 혼란스러워할 만한 부분이다.