모자딥 24장 클로저

릿·2023년 2월 2일
0

24장 클로저

  • 클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합임

24.1 렉시컬 스코프


  • 자바스크립트 엔진에 의해 함수를 어디서 호출했는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결정하는 것을 렉시컬 스코프(정적 스코프)라 함
  • 렉시컬 환경의 상위 스코프에 대한 참조는 함수 정의가 평가되는 시점에서 함수가 정의된 환경(위치)에 의해 결정되는 것이 렉시컬 스코프임

24.2 함수 객체의 내부 슬롯 [[Environment]]


  • 함수는 자신의 내부 슬롯 [[Environment]]에 상위 스코프의 참조를 저장함

함수 코드 평가 순서

  1. 함수 실행 컨텍스트 생성
  2. 함수 렉시컬 환경 생성
    2.1 함수 환경 레코드 생성
    2.2 this바인딩
    2.3 외부 렉시컬 환경에 대한 참조 결정

24.3 클로저와 렉시컬 환경


  • 외부 함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있는데 이러한 중첩 함수가 클로저임

24.4 클로저의 활용


  • 클로저는 상태(state)를 안전하게 변경하고 유지하기 위해 사용함, 상태를 안전하게 은닉하고, 특정 함수에게만 상태변경을 허용하기 위해 사용
  • 아래와 같이 함수가 호출될 때마다 상태가 변경되기 이전상태를 유지할 수 있도록 하기 위해서 클로저를 사용함
// 카운트 상태 변경 함수
const increase = (function () {
  // 카운트 상태 변수
  let num = 0;
  // 클로저
  return function () {
    // 카운트 상태를 1만큼 증가시킨다
    return ++num;
  }
}());

console.log(increase()); // 1
console.log(increase()); // 2
console.log(increase()); // 3

24.5 캡슐화와 정보 은닉


  • 완벽한 정보 은닉이 필요하다면 class문법 사용!
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글