공학/정보성

자바스크립트 클로저(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)