오늘은 클로저에 대해 내용 정리를 하려고합니다. 스코프에대해 공부를 하면 클로저 내용도 따라오기 때문에 클로저에 대해 알아봅시다.
클로저는 함수와 함수가 선언된 어휘적 환경(Lexical Environment)의 조합입니다.
즉, 내부함수가 외부함수를 접근할 수 있음 전역변수를 사용하지 않고 함수 밖에서 해당 변수에 접근 할 수 있게 도와줍니다.
렉시컬 환경이 뭔지 이해가 가지 않습니다 말도 어렵고요 좀 쉽게 설명을 해보자면


코드를 보시면 inner 함수가 정의된 위치에 따라 참조하는 q값이 달라지는 것을 확인 할 수 있습니다.
이유는 자바스크립트는 정적 스코프를 따르는 언어입니다. 정적 스코프는 함수가 선언된 위치에 따라 상위 스코프가 달라집니다. 즉 어디에서 함수를 정의했는지에 따라 상위 스코프가 결정됩니다.

이 코드를 보면 "내부함수가 외부함수를 접근할 수 있음 전역변수를 사용하지 않고 함수 밖에서 해당 변수에 접근 할 수 있게 도와줍니다." 이 내용을 이해할 수 있습니다.
inner함수가 내부 함수에서 외부 함수로 지역 변수 접근을 했기 때문에 렉시컬환경은 사라지지 않습니다.