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