실행컨텍스트

fromzoo·2021년 2월 10일
0

실행컨텍스트란?

  • 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념
  • 쉽게 말하자면 코드들이 실행되기 위한 환경
  • 코드가 실행된다면 Execution Context 내부에서 실행되고 있는 것이다.

자바스크립트 엔진에서 코드를 실행하기 위해서는 실행에 필요한 정보를 알고있어야한다.

  • 변수 : 전역변수, 지역변수, 매개변수, 객체의 프로퍼티
  • 함수 선언
  • 변수의 유효범위
  • this

1. Execution Context의 종류

전역컨텍스트 Global Context

  • 함수 안에서 실행되는 코드가 아니라면 모든 스크립트는 Global Context에서 실행된다.
  • 스택구조를 가지는 형태로 실행컨텍스트가 생성이 된 후 global object로 window가 this로 할당되고 스택에 쌓이게된다.
  • 전역컨텍스트안에 포함되는 모든 코드들의 실행 가능한 코드들은 순서대로 스택에 쌓이게 되며 LIFO(Last In First Out)으로 함수를 실행하게 된다.

함수컨텍스트 Functional Context

  • 선언된 함수가 호출이 될 때를 기점으로 생성이 되고, 함수의 모든 동작이 종료되면 함수컨텍스트는 소멸된다.
    - 하지만 클로저를 사용한다면 스코프가 소멸하지 않고 이용할 수 있다.
  • 각각의 함수들은 각각의 함수컨텍스트를 가지지만 함수가 호출인 되어야만 생성이된다.

2. Execution Context의 3가지 객체

실행컨텍스트는 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이지만 물리적으로는 객체의 형태를 가지며 3가지 프로퍼티를 소유한다.

변수객체 Variable Object

  • 실행컨텍스트가 생성이 되면 자바스크립트 엔진은 실행에 필요한 정보들이 있기 때문에 정보들을 담을 객체를 생성한다.
    - 호이스팅과 연관이 있을 것이라 추측
  • variable
  • parameter와 arguments
  • 함수선언(함수표현식은 제외)
  • 변수객체는 실행컨텍스트의 프로퍼티이기 때문에 값을 갖는데 전역코드에서 실행되는 전역컨텍스트와 함수가 호출될때 생성되는 함수컨텍스트의 경우 값들이 가리키는 객체가 다르다
  • 왜냐하면 함수컨텍스트에는 parameter와 arguments가 들어있기 때문에 벌어지는 차이점

Scope Chain

  • 스코프체인은 리스트라고 생각하면 된다.
  • 전역 객체와 함수의 스코프의 레퍼런스를 저장하고 있다.
  • 스코프체인은 실행컨텍스트가 참조할 수 있는 변수, 함수 선언 등의 정보를 담고 있는 리스트를 가르킨다.
  • 자바스크립트 엔진은 스코프체인을 통해 렉시컬 스코프를 파악한다.
  • 상위 함수, 전역 스코프 등을 참조할 수 있는 이유가 스코프체인이 검색을 하기 때문이다.
  • 하위 -> 상위 -> 전역 참조에 실패한다면 스코프 체인에 담겨진 순서대로 계속해서 이어가는 것이다.
  • 검색에 실패하게 된다면 정의되지 않는 변수에 접근하는 것이기 때문에 에러를 발생시킨다.

this

  • this 프로퍼티는 this 갑이 할당되는데 할당되는 값은 this의 5가지패턴으로 결정된다.

요약

실행컨텍스트란 ?

  • 실행 가능한 코드를 형상화하고 구분하는 추상적 개념
  • 코드들이 실행되기 위한 환경
  • 코드가 실행된다면 실행컨텍스트 내부에서 실행하고 있는것

실행컨텍스트의 종류
1. 전역컨텍스트

  • 스택구조
  • this -> window 할당
  1. 함수컨텍스트
  • 선언된 함수가 호출되면 함수컨텍스트가 생성된다.

  • 함수의 모든 동작이 종료되면 소멸

  • but 클로저 사용시 스코프가 소멸하지 않고 이용

    실행컨텍스트의 3가지 객체

  1. 변수객체
  • 실행컨텍스트가 생성되면 js엔진은 실행에 필요한 정보들을 담을 객체를 생성한다. -> 호이스팅과 연관
  • 전역컨텍스트와 함수컨텍스트는 arguments 차이점을 가진다.

<구성>

  • arguments / parameter
  • variable
  • 함수선언(표현식 제외)
  1. 스코프체인
  • 스코프체인은 실행컨텍스트가 참조할 수 있는 변수, 함수선언 등의 정보를 담고 있는 리스트다.
  • js엔진은 스코프체인을 통해 렉시컬 스코프를 파악한다.
  • 전역 스코프를 참조할 수 있는 이유는 스코프체인이 검색을 하기 때문
  1. this

참고

profile
프론트엔드 주니어 개발자 🚀

0개의 댓글