Community

저번에 올린 글에 연장선상에서 실행컨텍스트를 더 자세히 공부하고 Closure 문제 풀이과정을 작성한 블로깅을 진행했습니다. 직접 실행컨텍스트 스택을 손으로 그려보고 단계별로 값 변화를 추적하니 긴

저번에 올린 글에 연장선상에서 실행컨텍스트를 더 자세히 공부하고 Closure 문제 풀이과정을 작성한 블로깅을 진행했습니다. 직접 실행컨텍스트 스택을 손으로 그려보고 단계별로 값 변화를 추적하니 긴가민가했던 변수 참조를 훨씬 파악하기기 수월해졌습니다. 글을 요약하자면 이렇습니다. Closure는 호출스택에서 제거된 상위 함수 내부에 선언된 변수나 함수를 접근할 수 있는 함수를 말합니다. 일반적으로 함수 외부에서 함수 내에 선언된 변수나 함수를 참조할 수 없습니다. 그 이유는 스코프라는 변수 접근을 제한하는 유효범위가 적용되기 때문입니다. 함수 스코프 같은 경우 함수 내부만 변수 접근을 허용합니다. Closure는 겉으로 보면 이 규칙을 무시하는 것처럼 보입니다. 하지만 실행컨텍스트를 이해하면 전혀 그렇지 않다는 사실을 알 수 있습니다. 실행컨텍스트는 코드를 실행하기 위한 추상적인 환경인 동시에 물리적인 객체로 저장됩니다. 실행컨텍스트는 스코프 내에서 선언된 변수들과 함수들을 담는 변수객체, 현재 실행컨텍스트의 변수객체부터 상위 실행컨텍스트들의 변수객체를 순차적으로 담는 스코프 체인, this 로 구성되어있습니다. 스코프 체인은 어떤 변수를 참조할 지 결정지을 때 현재 실행컨택스트의 변수객체에서 찾고 없으면 상위 컨텍스트의 변수객체에서 찾는 과정을 반복하는 검색 메커니즘입니다. 아까 일반적으로 함수 스코프는 함수 내부로 한정한다고 했습니다. 정확히 말하면 함수는 스코프 체인의 첫 번째로 들어 간 자신의 실행컨텍스트의 변수객체를 통해 함수 내부에 선언된 변수들과 함수들을 참조할 수 있는 반면, 외부는 스코프 체인에 함수 실행컨텍스트의 변수 객체를 갖고 있지 않기 때문에 함수 내부에 접근이 불가능하다는 뜻입니다. 그러나 Closure는 스코프 체인에서 상위 함수실행컨텍스트의 변수 객체를 담고 있기 때문에 접근이 가능한 것입니다.

알림

알림이 없습니다