클로저 : 함수형 프로그래밍 언어 하스켈, 리스프, 얼렝 , 스칼라에서 사용되는 특성임
자바스크립트 렉시컬 스코프 따르는 프로그래밍 언어.
JS 엔진은 함수를 어디에서 정의했느냐에따라 상위 스코프 결정 → 렉시컬스코프(정적스코프)
함수가 정의된 환경 , 호출위치 다름 렉시컬 스코프 가능하려면, 상위스코프 기억해야함.이를위해 [[Enviroment]] 에 상위스코프 참조 저장함
→ 즉, 내부 슬롯에 저장된 상위 스코프 참조는 현재 실행중인 실행 컨텍스트의 렉시컬 환경 가르킴
함수코드 평가 순서
함수실행 컨텍스트 생성 → 함수 렉시컬 환경 생성(함수 환경 레코드 생성, this바인딩, 외부 렉시컬 환경에 대한 참조 결정)
: A closure is the combination of a function and the lexical environment which that function was declared(상위스코프)
외부함수보다 중첩함수가 오래 유지될때, 생명주기 끝난 외부 함수 변수 참조하는 중첨함수
함수는 어디서 호출하든 자신이 기억하는 상위 스코프 식별자 참조 가능, 식별자 바인딩된 값 변경가능
클로저 : 자유변수에 묶여있는 함수.
free variable : 클로저에 의해 참조되는 상위 스코프의 변수.
상태를 안전하게 변경하고 유지 위해사용. → 상태 안전하게 은닉하고 특정 함수에게만 상태 변경을 허용하기위해 사용.
클로저로 정보 은닉되긴하나 완전하게 지원하지 않음.. (변수의 값이 바뀔위험)