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가 못 치우는 메모리 누수 원인이 될 수 있습니다.
🔗 참고 자료
- Closures (MDN) — 클로저 정의, 실용 패턴, 루프에서의 흔한 실수를 다룬다.
- Closure (MDN Glossary) — 렉시컬 환경과 함께 묶인 함수의 용어 정의를 제공한다.
- Functions — scopes and closures (MDN) — 함수 스코프와 클로저가 만들어지는 조건을 설명한다.
- ECMAScript Language Specification (TC39) — Lexical Environment 등 언어 핵심 개념의 명세다.
