클로저란?
클로저(Closure)는 함수 내부에 정의된 함수(inner function)가 외부 함수(outer function)의 변수 및 스코프에 접근할 수 있는 개념을 말합니다. 외부 함수가 실행을 종료하고, 해당 변수가 더 이상 외부에서 접근할 수 없는 상황에서도 내부 함수는 외부 함수의 변수에 접근할 수 있습니다.
핵심 개념:
- 외부 함수가 실행을 종료해도 내부 함수는 외부 함수의 스코프를 "기억"합니다.
- 클로저는 자바스크립트에서 스코프와 실행 컨텍스트의 특징을 활용한 개념입니다.
위 사진의 코드 동작 자세히 설명
- outerFunction('outside') 실행:
- outerVariable에 'outside'가 할당됩니다.
- outerFunction은 내부 함수 innerFunction을 반환합니다.
- 반환된 innerFunction은 외부 함수(outerFunction)의 변수(outerVariable)를 "기억"하고 있습니다.
- newFunction('inside') 호출:
- innerFunction이 실행됩니다.
- 이때, 내부 함수는 자신이 기억하고 있는 외부 변수 outerVariable과 전달받은 매개변수 innerVariable 모두에 접근합니다.
출력 결과
Outer Variable: outside
Inner Variable: inside
예제 1: 스코프 이해
설명:
- functionA 내부에서 b는 지역 변수로 선언되어 함수 외부에서는 접근할 수 없습니다.
- a는 전역 변수이기 때문에 함수 내부에서도 접근할 수 있습니다.
예제 2: 다른 함수에서 지역 변수 접근 시도
설명:
- functionB는 functionA 내부에 선언되지 않았으므로 b에 접근할 수 없습니다.
- 스코프 체인 상, b는 functionA 내부에서만 존재합니다.
요약
- 클로저는 함수가 종료된 후에도 외부 함수의 스코프를 기억하고 접근할 수 있는 강력한 도구입니다.
- 이를 통해 데이터 은닉, 상태 유지, 동적 함수 생성 등 다양한 기능을 구현할 수 있습니다.
'개발일지 > JavaScript' 카테고리의 다른 글
[23] 전개 연산자(Spread Operator) (0) | 2024.11.27 |
---|---|
[22] 구조 분해 할당 (Destructuring) (0) | 2024.11.27 |
[20] Event Loop (0) | 2024.11.26 |
[19] 조건부 삼항 연산자 (0) | 2024.11.26 |
[18] bind, call, apply (0) | 2024.11.26 |