본문 바로가기

Javascript

[javascript] 실행 컨텍스트와 콜 스택

1) 정의

- 코드가 실행될 때 참조 가능한 변수를 모아 만든 환경 객체

세 가지 경우에 형성

: 자바스크립트 실행 시(전역 컨텍스트)

: 함수 실행 시(함수 컨텍스트)

: eval() 실행 시

 

- 호출된 함수와 함께 콜스택에 쌓임

 

2) Es3 시절에 실행 컨텍스트의 형성 과정

- 실행 컨텍스트 내 변수 환경 객체 할당

- 함수의 인자를 객체 내 등록

- 스코프 체인 설정(듄더 프로퍼티)

: 호출된 함수가 상위 스코프를 단계적으로 넘어가며 참조 가능함

: 내부 맥락에서 외부 맥락으로의 참조가 가능한 구조

: 전역 컨텍스트는 상위 컨텍스트가 없음(null)

 

- 변수 선언(var) 및 할당, param 할당

: 호출된 함수 최상단으로의 호이스팅으로 즉시 선언 및 undefined초기화

: 실제 코드에서 특정 값을 할당

 

 

3) es6의 실행 컨텍스트

- 하나의 컨텍스트 내에 variable enviroment lexical enviroment로 분리되어 구성

이유 | variable enviroment var변수가 저장, lexical enviroment let, const 변수 저장

: var은 함수형 스코프이고, let이나 const는 블록스코프

: tdz 발생 여부 |선언(렉시컬에 변수 등록)-초기화(undefied로 메모리할당)-할당(실제 값 할당) 방식의 차이(var은 선언과 초기화가 동시에 되어서 바로 참조가 가능, 하지만 let, const는 호이스팅 후 선언만 되므로 즉시 참조 시, 참조 에러 발생)