https://poiemaweb.com/js-closure
클로저는 자바스크립트에서 무척 중요한 개념이지만
자바스크립트 고유의 개념이 아니라 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 특성입니다.
클로저 : 함수와 그 함수가 선언됐을 때의 렉시컬 환경과의 조합
스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다. 이를 렉시컬 스코핑(Lexical scoping)이라 한다.
자신을 포함하고 있는 외부함수보다 내부함수가 더 오래 유지되는 경우, 외부 함수 밖에서 내부함수가 호출되더라도 외부함수의 지역 변수에 접근할 수 있는데 이러한 함수를 클로저(Closure)라고 부른다.
말이 어렵지만 그냥 함수 안에 함수들을 넣어놓으면 전역변수를 설정하지 않고도 렉시컬 환경을 공유하는 함수들을 만들어서 두가지의 효과(연동과 보안)를 기대할 수 있는 개념이다.
전역변수의 값은 누군가에 의해 언제든지 변경될 수 있어 오류 발생의 근본적 원인이 될 수 있다. 상태 변경이나 가변(mutable) 데이터를 피하고 불변성(Immutability)을 지향하는 함수형 프로그래밍에서 사이드이펙트를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이기 위해 적극적으로 사용된다.