클로저란
실행 컨텍스트 스택에서 제거된 후 렉시컬 환경이 보통 제거되지만,
사라져야할 렉시컬 환경의 식별자를 외부에서 참조하고있다면
렉시컬 환경이 유지됨
더 쉽게 말하면
a 라는 함수내부에 x변수가 있고,
a 함수가 종료되었으면 x변수도 정리되어야함
단, x변수를 외부에서 참조하고있다면 정리되지 않음
실행 컨텍스트를 알아야 이해가 더 쉬울 수 있음
https://yamyam-naengmyeon-donkats.tistory.com/114
클로저 예시
외부함수가 실행되는 과정에서
외부함수의 렉시컬 환경에 x가 등록되었음
이후, 함수가 종료되며 렉시컬 환경이 같이 버려지는게 아닌
"외부함수의 x를 참조하는 함수" 를 반환하여
렉시컬 환경을 계속 외부에서 참조하게 만듬
즉, 외부함수가 종료되었음에도 렉시컬 환경을 참조하니
외부함수 내부 x의 상태가 유지됨
a를 실행할때마다 내부함수가 실행되는데
x의 상태가 유지되어 1씩 올라감
클로저의 장점
위 코드를 클로저로 사용을 안한다면 아마 아래 예시처럼 나올것임
코드는 짧아져 편하긴 하지만,
아래와 같은 장점이 있음
변수의 스코프를 최대한 축소한다.
위 코드에선 x가 함수 외부에 있음
지금은 예시가 짧아 문제가 없겠지만
x가 만약 value라는 이름이었다면
유사한 이름의 value 변수들이 많았을것임
즉 변수명 짓기도 쉬워지고 중첩되는 문제를 어느정도 해소해준다.
위와 같은이유로 그냥 a라는 기능에만 있을 변수들이라면
한 곳에 몰아넣어주고싶음
'js > 개발' 카테고리의 다른 글
js async & await (0) | 2024.08.07 |
---|---|
js 생성시점때 형제스코프내에서 메소드를 찾고싶을때 (0) | 2023.09.11 |
js 생성자함수 (0) | 2023.02.15 |
js 재귀함수 & 콜백함수 (0) | 2023.02.12 |
js 빌트인 객체 (0) | 2022.12.18 |
댓글