공학/정보성
자바스크립트 클로저(closure)
카카루1331
2020. 8. 19. 22:35
클로저(closure)란?
함수 객체가 외부 함수에 대한 활성 객체(activation object)의 참조를 갖는 방식을 일컫는다.
활성객체(activation object)는 무엇인가요?
활성객체는 숨겨진 데이터 구조다.
함수가 호출되면 활성객체(activation object)가 생성된다.
아래는 활성객체가 갖는 정보의 일부다.
- 함수 객체에 대한 참조
- 함수 매개변수
- 함수 변수
- 함수가 메소드로 호출 되었을 경우 사용되는 this 참조
다시 함수객체에 대하여
한편 앞서 언급한 함수객체는 두 가지 속성을 갖는다.
- 함수 실행 코드에 대한 참조
- 활성 객체에 대한 참조
눈여겨 볼 것은 함수 객체의 두 번째 속성이다.
함수는 중첩될 수 있다.
자바스크립트의 함수는 중첩될 수 있다.
그리고 중첩 함수의 객체는 자신을 생성한 외부 함수의 활성 객체에 대한 참조를 갖는다.
다시말해 활성 객체에 대한 참조를 이용해 중첩 함수는 중첩 함수를 만든 함수의 변수에 접근할 수 있다!
샘플 코드
See the Pen VwaKWeP by Kim Je (@kim-je) on CodePen.
References
<자바스크립트는 왜 그모양일까?(How Javascript Works)> - 더글러스 크락포드(Douglas crockford)