-
묵혔다 꺼낸 JS - 클로저JS 2021. 10. 15. 22:36
클로저란?
클로저란 중첩된 스코프영역에 있는 함수를 외부에서 반환받고, 반환받은 중첩된 함수를 통해서 중첩함수의 상위 스코프에 접근할 수 있는 특성을 이야기한다.
말이 조금 복잡한거같은데 코드 조금만보고 금방 이해해보도록하자.
이상한 부분이 느껴진다면 스코프에 대해서 공부했을 때 외부 스코프에서는 내부 스코프에 대해 접근 할 수 없는데 위 코드의 콘솔 결과를 보면 아무 이상없이 clo1 함수의 내부 스코프에 접근하고있다.
이것이 바로 클로저의 특징이다.
더 자세히 설명해보자면 clo1의 리턴하는 것이 값(원시 값)이 아닌 fn1 함수(Function객체)를 리턴하고있다.
clo2에는 이 fn1의 객체가 참조되고, clo2를 실행 할 때마다 진짜 함수의 실행은 원본인 clo1함수의 내부인 fn1함수 스코프단에서 실행이 되는 것이다.
그래서 원본 함수가 실행되는 fn1에서는 (스코프의 기본적인 원리를 통해)상위 스코프에 접근이 가능하게되고, 상위 스코프에 존재하는 a라는 변수를 참조가 가능하여 이와같은 현상이 발생가능 한 것이다.
마지막으로 클로저의 특성을 응용하면 아래와같이 private한 접근성을 가진 변수를 만들 수 있다.
'JS' 카테고리의 다른 글
묵혔다 꺼낸 JS - this (0) 2021.10.21 묵혔다가 꺼낸 JS - 스코프의 효용성, 블록 스코프, 호이스팅 (0) 2021.10.12 묵혔다가 꺼낸 JS - 렉시컬 스코프 (0) 2021.10.08 묵혔다 꺼낸 JS - 컴파일러와 스코프 (0) 2021.10.04 묵혔다 꺼낸 JS - 암시적 변환 (==연산자의 비교연산) (0) 2021.09.29