Closure

클로저와 렉시컬 환경 추적

클로저는 함수가 끝난 뒤에도 외부 변수를 기억하는 구조다. 호출 스택이 사라져도 참조되는 렉시컬 환경은 남는다.

01

외부 함수 호출

지역 변수와 내부 함수가 같은 렉시컬 환경에 만들어진다.

environment
02

내부 함수 반환

외부 함수 실행은 끝나지만 내부 함수가 변수를 참조한다.

return fn
03

환경 보존

참조 중인 변수는 가비지 컬렉션 대상이 되지 않는다.

closed over
04

나중 호출

반환된 함수가 다시 실행될 때 이전 값을 읽고 갱신한다.

state
05

캡처 위험

반복문 변수 캡처나 공유 상태 변경에서 예상과 다른 결과가 날 수 있다.

capture

값이 보존되는 형태

function counter() {
  let n = 0;
  return function () {
    n += 1;
    return n;
  };
}