개발이야기

[TIL]06.자바스크립트 실행 컨텍스트

무서운승태 2023. 10. 19. 18:54
728x90

실행 컨텍스트란?????

사실 이 주제는 3주 차 강의 내용인데 처음 들었을 때는 이해가 가지 않는 부분이 많아서 TIL에 기록을 하지 않았다. 강의를 2 회독 한 시점에서 조금 감을 잡았고 정리한 내용을 한 번 더 읽으니까 더 이해하기 쉬웠다.

 

자바스크립트는 CallStack 이란곳에 실행 콘텍스트를 저장하고 Stack자료구조(FIFO)처럼 관리해서 코드 실행순서를 보장한다.

CallStack에 저장하는 실행 콘텍스트란것이 무엇인지 알아보자

 

실행 컨텍스트

  • 실행할 코드에 제공할 환경 정보를 모아놓은 객체이다.
  • 3가지 일을 함
    • 호이스팅
    • 외부 환경 구성
    • this 바인딩

실행 콘텍스트에는 무엇이 담기나??

  • VariableEnvironment
    • 식별자 정보 (record)는 변수, 함수, 매개변수 등을 의미한다.
    • 외부 환경 정보 (outer)이다.
    • 선언 시점에서 스냅숏을 가지고 있으며, 실시간으로 반영되지 않는다.
  • LexicalEnvironment
    • 변경사항을 실시간으로 반영한다.
    • 실시간 반영을 제외한 나머지는 VariableEnvironment와 동일하다.
  • ThisBinding
    • this 식별자가 어떤 객체를 가리킬지 정해야 한다.

Record

  • 호이스팅 (식별자 정보를 모두 끌어올린다) ⇒ 레코드의 수집과정
    • 매개변수, 변수는 선언부만 끌어올린다 ⇒ 할당은 X
    • 함수는 전체를 끌어올린다.
      • 함수 선언문 : 함수 전체가 호이스팅 된다. ⇒ 전체에 영향이 간다
      • 함수 표현식 : 변수 선언부만 호이스팅 된다. ⇒ 함수 할당 이후부터 영향이 간다. (이 방식을 주로 사용해야 함)

Outer

  • 그 실행 컨텍스트가 선언될 당시에 LexicalEnvironment 정보를 다 가지고 있다. 그래서 스코프 체이닝에 의해 상위 콘텍스트에 record를 읽을 수 있다.(상위 객체의 변수, 메서드 등등을 읽을수 있다.)
  • 예 ) A → B → C 순서대로 함수가 실행된다고 가정했을 때 C의 실행콘텍스트가 담길 때 B의 LexicalEnvironment정보가 C의 outer로 담긴다.