모던 자바스크립트 딥다이브 스터디 #5-1 (CH 24 클로저)

24장 클로저

클로저란…

클로저는 실행컨텍스트를 이해하면 이해가 쉽다…

기본적으로 MDN에서는 클로저를 다음과같이 정의한다.

MDN의 클로저 정의


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엔진은 함수를 어디서 호출했는지가 아니라, 어디에 정의했는지에 따라 상위 스코프를 결정한다. 이를 렉시컬 스코프(정적 스코프)라고 한다.

💡 이는 전에 실행컨텍스트를 다루는 내용에서 배운 바 있다.

외부 렉시컬 환경에 대한 참조 결정

Untitled

이 렉시컬 환경은 자신의 “외부 렉시컬 환경에 대한 참조”를 통해 상위 렉시컬 환경과 연결되고, 이것이 스코프 체인의 실체이다.

이제서야 이런 이야기를 하다니… 그동안 마치 스코프가 어떤 object인것처럼 설명하고! 이건 이 책에서 혼란스러워할 만한 부분이다.