클로저 (Clousre)
- 자바스크립트에서 이미 콜스택에서 제거된 실행컨텍스트 내부에 있는 식별자에 참조 할 수 있는 현상
- ex. 중첩된 함수에서 상위 스코프에 해당하는 실행이 종료되었음에도 불구하고, 해당 상위 스코프 내의 식별자에 접근 가능한 것
어떻게 가능한가?
- 실행 컨텍스트(Excecution Context)와 관련있다.
- 일단 어떤 식별자를 찾을 때 현재의 실행컨텍스트 내에서 찾아보고 없으면 스코프 체이닝으로 바깥 환경의 렉시컬 환경을 본다.
클로저 활용 1. 은닉화
const user=()=>{
let name = '';
return {
getUserName:()=>{
return name;
},
setUserName:(_name:string)=>{
name=_name;
}
}
}
- 위와 같이 어떤 모듈의 내부 로직의 노출을 최소화 할 수 있다.
클로저 활용2. 부분적용함수
- n개의 인자를 받는 함수에 미리 m개의 인자만 넘겨 기억시켜둔 후, 나중에 나머지 인자를 넘겨 함수의 실행결과를 얻을 수 있도록 하는 함수
클로저 활용3. 커링(Currying)
const reduxThunk = (store) => (next) => (dispatch) => {
reutrn typeof action === 'function' ? action(dispatch, store,getState) : next(action);
}
https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures