웹/JS핵심개념 JS Flow
[JS Flow] 02. 실행컨텍스트 (Execution Context)
onwah
2021. 1. 20. 00:12
실행 컨텍스트란?
- 함수를 실행할 때 필요한 환경정보
- 함수를 실행할 때 필요한 환경정보 객체
Call Stack?
-
실행 컨텍스트를 관리하는 자료구조
- 현재 어떤 함수가 동작 중인지
- 다음에 어떤 함수가 호출될 것인지를 제어한다.
실행 컨텍스트가 스택 방식으로 쌓인다!
실행 컨텍스트 객체의 구조
- VariableEnvironment: 초기의 정보를 담고있음
- LexicalEnvironment: 이후 변경사항을 추적 (VariableEnvironment와 구조가 같다)
- ThisBinding
LexicalEnvironment의 구조
- environmentRecord 객체
- 현재 컨텍스트의 식별자 정보를 갖는 객체, Hoisting(끌어올리기) 현상이 나타남. 해당 함수 내부의 함수선언과 변수 선언부를 객체 프로퍼티로 저장한다.
- outerEnvironmentReference
- 현재 컨텍스트의 바로 바깥 컨텍스트에 대한 참조. 바로 바깥 컨텍스트의 LexicalEnvironment에 접근이 가능하다.
바로 바깥 컨텍스트의 LexicalEnvironment에 접근이 가능하다는 것의 의미
scope(변수의 유효 범위) chain이 형성된다.
현재 실행컨텍스트는 바로 바깥 컨텍스트에서 식별자 정보를 탐색하는 것을 반복한다!
무한 반복으로 전역 컨텍스트 객체에까지 도달할 수 있다.
함수를 실행했을 때(컨텍스트가 활성화 되었을 때) 동작 방식
- environmentRecord를 수집한다 (≒ Hoisting!)
- line by line으로 함수를 실행한다.
- 해당 라인에서 식별자가 사용된다.
- 자기 자신 컨텍스트의 environmentRecord를 탐색한다.
- 없을 경우 outerEnvirenmentReference로 한 단계 위 컨텍스트를 탐색한다 (타겟 식별자를 찾을 때까지 && 전역 컨텍스트까지 무한 반복!)
- 자기 자신 컨텍스트의 environmentRecord를 탐색한다.
- 해당 라인에서 식별자가 사용된다.