CoreJavaScript_02.실행컨텍스트(1)

손병진·2020년 11월 2일
0

CoreJavaScript

목록 보기
3/10

해당 내용은 '코어 자바스크립트' 서적을 참고하여 작성되었으며, 초보 개발자에게 유익한 책을 지필해주신 지은이 정재남 님께 감사의 말씀을 드립니다.

실행컨텍스트

  • 실행컨택스트란?
    실행되는 코드에 대해 제공할 환경 정보들을 모아놓은 객체

  • 구성 방법
    1. 전역 컨택스트
    2. eval()
    3. 함수 실행
      ... 등

      1번 상황은 자동으로 구성되고, 2번 같은 경우는 특수한 상황이기에
      개발자가 실행컨택스트를 구성하는 대부분의 경우는 3번이다.


콜스택(call stack)

  • 자바스크립트에서 코드를 인식하고 실행할 때에 콜스택 방식의 환경과 순서로 진행된다.

stack vs queue
자료구조의 기본적인 두가지 종류인데 간단하게 말하자면
stack: Last In First Out (마지막에 입력된 내용이 먼저 실행)
queue: First In First Out (처음에 입력된 내용이 먼저 실행)
이 두개념을 가지고도 설명하는 블로깅이 굉장히 많아 쉽게 확인하고 이해할 수 있을 것이라 생각한다

// 1. 코드가 시작할 때에 전역컨택스트가 자동으로 구성된다
var a = 1;

function outer(){ // outer 함수 정의
  function inner(){ // inner 함수 정의
    console.log(a); // undefined
    var a = 2
  }
  
  inner(); // 3. outer 실행컨택스트 내에도 함수 실행 명령어가 있어 또다른 실행컨택스트가 구성된다(inner)
  console.log(a); // 1
}

outer(); // 2. 함수가 실행되었을 때 실행컨택스트가 구성된다(outer)
console.log(a); // 1
  • 콜스택 순서
    전역 -> 전역 / outer -> 전역 / outer / inner
    (여기까지 쌓이고 더이상 구성되는 실행컨택스트가 없기 때문에 LIFO 방식으로 종료, 제거 된다)
    -> 전역 / outer -> 전역 -> (end)
  • var 변수와 console.log 내용에 대해서는 이후 호이스팅 개념과 연결해야 명확하게 설명할 수 있다.

실행컨택스트의 수집 정보

  • 앞서 실행컨택스트의 개념에서 객체 라고 명시했다. 이는 개발자가 코드로 확인할 수 없지만 어떤 정보들이 쌓인다는 의미라는 것을 알 수 있다.

    1. Variable Enviroment
      현재 컨택스트 내의 식별자에 대한 정보(enviromentRecord)
      + 외부 환경 정보(값, 주소 혹은 데이터)(outerEnviromentReference)
      선언 시점의 Lexical Enviroment 의 스냅샷으로, 변경 사항은 반영되지 않음.

    2. Lexical Enviroment
      실행컨택스트를 생성할 때에는 Variable Enviroment 에 정보를 먼저 담은 다음,
      이를 그대로 복사해서 Lexical Enviroment 를 만들고, 이후에는 Lexical Enviroment 를 주로 활용한다. 변경 사항이 실시간으로 반연됨

    3. This Binding
      this 식별자가 바라봐야할 대상 객체

profile
https://castie.tistory.com

0개의 댓글