본문 바로가기
프로그래밍 개발/JS 핵심 언어 이론

Javascript 실행 콘텍스트 이론

by Jinseok Kim 2020. 12. 3.
반응형

실행 콘텍스트 Execution Context

 

  • Context는 코드 흐름상의 배경이 되는 조건 및 환경을 뜻한다. 즉 실행 콘텍스트는 실행에 필요한 코드 흐름상의 배경이 되는 조건 및 환경이라고 말할 수 있다.
  • 동일한 조건과 환경을 지닌 코드 뭉치(함수와 전역공간)를 실행할 때 필요한 조건과 환경정보라고 할 수 있다. 즉 함수를 실행하는데 필요한 환경정보(를 담은 객체)이다.

 

  • inner 안에는 VariableEnviroment LexicalEnviroment가 있는데 둘다 environmentRecord와 outerEnvironmentReterence의 객체를 가지고 있다.
  • VariableEnviroment는 순간적으로 캡쳐하고 그 뒤에 값이 바뀌는 것에 상관없이 그 순간적인 순간만의 값을 유지하는 것이며 LexicalEnviroment는 계속 이후에도 값이 바뀌며 값을 계속 반영하는 것을 뜻한다. 즉 둘은 같은 데이터를 가지고 있지만 값이 변경되느냐 변경되지 않느냐의 차이이다.

 

 

 

 

 

environmentRecord

 

  • environmentRecord는 현재 문맥의 식별자 정보를 가지고 있다. 식별자 정보를 끌어올린다는 뜻으로 HOSTING이라고 불린다.
  • 위의 코드 예시를 보면 식별자들을 위로 끌어올린 것처럼 볼 수 있다.(코드 예시는 이해하기 쉽도록 끌어올렸다는 것을 보여주기 위하여 임의로 만든 코드다.)
  • 그리고 실행 텍스트에서 함수가 전역공간이 처음 실행 될 때 제일 먼저 하는 일이 environmentRecord의 정보를 수집한다고 말할 수 있다.

 

 

 

 

 

 

 

outerEnvironmentReterence와 스코프 체인(Scope Chain)

 

 

  • outerEnvironmentReterence는 현재 문맥에 관련 있는 외부 식별자 정보라 한다. 즉 이 outerEnvironmentReterence 만들어 내는 것이 변수 유효 범위를 뜻하는 스코프 체인(Scope Chain)라고 한다.
  • environmentRecord inner, outer, 전역 각각 안에서 소환한 변수에 접근할 수 있고 inner안의outerEnvironmentReterenceouter LexicalEnviroment에 접근할 수도 있으며 outer의 outerEnvironmentReterence 또한 전역 LexicalEnviroment접근 할 수 있다고 볼 수 있다.
  • 하지만 outer에서 inner의  environmentRecord로는 접근하지 못한다. 왜냐하면 접근할 수 있는 루트가 존재하지 않는다.
  • 대신 outerenvironmentRecord는 더 안쪽인 inner에 갈수도 있고 자신 안에서도 활동할 수 있다. 즉 내부에서 외부로 나갈 수 있지만 외부에서 안으로는 못들어간다고 말할 수 있다.

 

 

 

위의 예시는 inner안에 var a 객체가 없으면 외부로 나가 outer에서 var a 객체를 찾고 또 없으면 전역까지 외부로 나가 var a를 찾는다는 맥락을 설명한 것이다. 위 맥락을 스코프 체인(Scope Chain)이라 한다.

한마디로 스코프 체인(Scope Chain)은 첫 번째로 가장 가까운 자기 자신안에서 먼저 원하는 변수를 찾고 없다면 밖으로나가 다시 한번 찾으며 또 없으며 전역까지 나아가 원하는 변수를 찾는다는 흐름이라고 말할 수 있다.

 

 

 

 

 

 

실행 콘텍스트의 예시 코드

 

 

 

 

 

 

 

 

인프런의 정재남 강사님의 강의를 참조하였습니다.

https://www.inflearn.com/instructors/46840/courses

반응형

댓글