JavaScript - 실행 컨텍스트

lsjoon·2022년 12월 17일
0

JavaScript

목록 보기
10/32

Execution Context

자바스크립트 코드가 실행되고 연산되는 범위를 나타내는 추상적인 개념

- 실행할 코드에 제공할 "환경 정보"들을 모아놓은 객체 (박스, 컨테이너)
- 동일한 환경에 있는 환경 정보들을 모은 실행 컨텍스트를 콜 스택에 쌓아올린 후 실행함으로써 코드의 환경과 순서를 보장

코드 실행에 필요한 정보

  • 변수 (전역변수, 지역변수, 매개변수, 객체의 속성)
  • 함수 선언
  • 변수의 유효 범위 (Scope)
  • this

실행 컨텍스트의 생성 조건


1. 글로벌 실행 컨텍스트

특정 함수 내부에 종속되지 않는 코드들이 가지는 컨텍스트
전역 컨텍스트는 내부에서 두 가지 작업을 수행

  • window 전역 컨텍스트 생성
  • this전역 객체로 설정

2. 함수 실행 컨텍스트

함수가 호출 될 때마다 새로운 실행 컨텍스트가 생성

3. Eval 실행 컨텍스트

eval 함수 내에서 실행되는 코드가 가지는 컨텍스트


실행 컨텍스트 생성 과정


자바 스크립트는 코드를 실행하는 순간, 전역 컨텍스트를 콜 스택에 담음
그 후 새로운 함수가 실행 될 때마다 실행 컨텍스트가 생성됨

이 때, 실행 컨텍스트는 "생성"과"실행"의 두 단계를 거침

1. 생성 단계

  • 렉시컬 환경 구성요소 (Lexcial Environment) 생성
  • 변수 환경 구성요소 (Variable Environment) 생성

1-A. 렉시컬 환경 (Lexcial Environment)

변수와 해당 변수에 대입된 값을 매핑
= 참조 대상 식별자 (Identifier)
= 어떤 대상을 다른 대상과 구분하여 식별할 수 있는 유일한 이름

구성요소

  • 환경 레코드 (Enviroment Records)
  • 외부 환경(Outer environment)에 대한 참조
  • This 바인딩
  • 환경 레코드
    렉시컬 중첩 구조 기반으로 변수, 함수 식별자와 값을 관리
    호이스팅이 발생하게 되는 원인
    = 렉시컬 환경 내에서 함수와 변수 선언을 저장

  • 외부환경에 대한 참조
    외부의 렉시컬 환경으로 접근 가능 (스코프 체인)
    = 현재의 렉시컬 환경에서 변수와 매핑된 값을 찾지 못했다면, 외부 환경에서 해당 변수에 대한 내용을 탐색

  • This 바인딩
    전역 컨텍스트에서의 This 는 전역 객체 = window
    함수 실행 컨텍스트에서는 함수 호출 방식에 따라 This 의 대상이 다름
    - 객체 참조에 의한 호출 : 해당 객체
    - 그 외의 호출 : 전역 객체
    - strict mode :undefined

1-B. 변수 환경 (variable Environment)

변수 환경 또한 렉시컬 환경이며, 렉시컬 환경이 가지는 모든 속성과 요소를 가짐

ES6에서부터 달라진 점
변수 환경은 변수 var 만 저장
렉시컬 환경은 함수 선언과 변수 let , const 바인딩을 저장


2. 실행 단계

모든 변수에 대한 값 할당이 완료된 후, 최종적으로 코드들이 실행되는 단계

profile
중요한 것은 꺾여도 그냥 하는 마음

0개의 댓글