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는 호이스팅 후 선언만 되므로 즉시 참조 시, 참조 에러 발생)
'Javascript' 카테고리의 다른 글
자바스크립트 모듈 개념 잡기 1부. 모듈의 등장 (0) | 2024.07.18 |
---|---|
[javascript] object의 property에 대하여(configurable, enumerable, writable) (0) | 2024.03.23 |
[javascript] html 요소의 스타일 값 가져오기(getComputedStyle(), HTMLElement.style) (0) | 2024.03.09 |
[javascript]스크립트 태그의 위치는 아무 곳이나 상관없을까? (0) | 2024.03.05 |
[JS] 모듈 import, export 시 동작 방식의 차이(export..from, export default) (0) | 2024.03.04 |