실행 컨텍스트

어승준·2023년 10월 29일

JS 스터디

목록 보기
24/26
post-thumbnail

📌 자바스크립트 콜스택에 대해서 말씀해주세요.

  • Call Stack은 코드가 실행되면서 생성되는 Execution Context를 저장하는 자료구조 입니다. 엔진이 처음 script를 실행할 때, Global Execution Context를 생성하고 이를 Call Stack에 push합니다. 그 후 엔진이 함수를 호출할 때 마다 함수를 위한 Execution Context를 생성하고 이를 Call Stack에 push 합니다.

  • 자바스크립트 엔진은 Call Stack의 Top에 위치한 함수를 실행하며 함수가 종료되면 stack에서 제거(pop)하고 제어를 다음 Top에 위치한 함수로 이동합니다.


📌 콜 스택 안에 동일한 식별자가 여럿일 때, JS 엔진이 어떻게 outer를 활용해서 의사결정을 할까요?

  • 현재 활성화된 실행 컨텍스트(콜 스택 최상위)에 없으면
  • outer가 가리키는 바깥 렉시컬 환경에서 찾음
  • 또 없으면 다시 outer로 바깥 렉시컬 환경 반복
  • 찾으면, 더 이상 바깥 렉시컬 환경으로 가지 않음
  • 찾은 곳과 바깥 렉시컬 환경에서 식별자가 같다면, 바깥 렉시컬 환경의 식별자의 상태를 알 수 없다
  • 이를 변수 섀도잉이라고 하며, 동일한 식별자로 인해 상위 스코프에서 선언된 식별자의 값이 가려지는 현상이다

📌 실행 컨텍스트의 객체에 담긴 정보는 무엇이 있나요?

  • 렉시컬 환경 은 식별자와 스코프를 관리
  • 실행 컨텍스트 스택은 코드 실행 순서를 관리

📌 실행 컨텍스트의 역할은 무엇인가요?

실행 컨텍스트란?

  • 코드를 실행하는 데 필요한 환경(조건이나 상태)을 제공하는 객체
  • 식별자를 더욱 효율적으로 결정하기 위한 수단

실행 컨텍스트의 역할

  • 코드가 실행되려면 스코프, 식별자, 코드 실행 순서 등의 관리가 필요하다.
  1. 선언에 의해 생성된 모든 식별자(변수, 함수, 클래스 등)을 스코프로 구분하여 등록, 상태 변화(식별자에 바인딩된 값의 변화)를 지속적으로 관리할 수 있어야 한다.
  2. 스코프는 중첩 관계에 의해 스코프 체인을 형성해야 한다. 즉, 스코프 체인을 통해 상위 스코프로 이동, 식별자를 검색할 수 있어야 한다.
  3. 현재 실행 중인 코드의 실행 순서를 변경할 수 있어야 하며 다시 되돌아갈 수도 있어야 한다.

이 모든 것을 관리하는 게 바로 실행 컨텍스트!!!


📌 실행 컨텍스트 렉시컬 환경은 무엇이고 어떤 역할은 하는지 설명해 주세요.

  • 식별자와 식별자에 바인딩된 값, 상위 스코프에 대한 참조를 기록하는 자료구조로 실행 컨텍스트를 구성하는 컴포넌트다.
  • 실행 컨텍스트 스택이 코드의 실행 순서를 관리한다면, 렉시컬 환경은 스코프와 식별자를 관리한다
  • 키와 값을 갖는 객체 형태의 스코프(전역, 함수, 블록 스코프)를 생성하여 식별자를 키로 등록하고 식별자에 바인딩된 값을 관리
    ➔ 스코프를 구분하여 식별자를 등록하고 관리하는 저장소 역할을 하는 렉시컬 스코프의 실체다.
profile
鈍筆勝聰(둔필승총) : '둔한 붓이 총명함을 이긴다' (서툴더라도 기록으로 남기는 것이 사람의 기억보다 훨씬 오래 보전된다) - 정약용

0개의 댓글