mason
mason-log.

mason

mason.

안녕하세요. mason 입니다.

javascript

Closure.

함수가 선언된 렉시컬 환경을 기억하는 Closure의 개념과 활용, 주의점

Closure는 함수가 자신이 생성된 렉시컬 스코프를 기억하고, 그 바깥 변수에 계속 접근할 수 있는 현상입니다.

📘 핵심 개념

클로저가 렉시컬 환경을 유지하는 구조

  • JavaScript의 스코프는 렉시컬(정적) — 함수가 어디서 선언됐는지가 중요합니다.
  • 내부 함수가 외부 함수의 변수를 참조하면, 외부 함수 실행이 끝나도 환경(Environment Record)이 유지됩니다.
  • 모든 함수는 생성 시점에 상위 스코프 체인을 클로저로 "닫아" 둡니다.
function makeCounter() {
  let count = 0;
  return () => ++count;
}

const counter = makeCounter();
counter(); // 1
counter(); // 2

🛠️ 활용

  • 데이터 캡슐화: private 변수처럼 상태를 숨김.
  • 팩토리 함수: 설정값을 고정한 함수 생성.
  • 이벤트 핸들러, 콜백: 생성 시점의 context 유지.
  • React hooks: useState, useEffect 클로저로 이전 렌더 값 참조.

⚠️ 주의점

  • var + for 루프에서 클로저를 만들면 같은 변수를 공유하는 실수가 흔함 → let 또는 IIFE.
  • 클로저가 큰 객체를 참조하면 GC가 못 치우는 메모리 누수 원인이 될 수 있습니다.

🔗 참고 자료