자바스크립트 실행 컨텍스트

이석원·2022년 8월 21일
0

실행 컨텍스트를 짧게 조사해봤다. 시간이 없어서 깊이 있게 조사하지 못했다.

실행 컨텍스트는 자바스크립트에서 뭔가를 실행할 때 구성되는 실행 환경이다. 스크립트에서 뭔가를 호출하면 그 뭔가는 스택에 하나씩 순서대로 들어간다. 나중에 호출한 뭔가가 위에 올라가고 먼저 호출한 뭔가는 그 아래 위치한다. 스택은 의미 그대로 후입선출이므로 나중에 호출된 경우 먼저 실행된다. 실행하기 위해 필요한 여러가지가 있다. 지금부터 모든 과정을 함수로 예를 들겠다. 함수는 실행을 위해서 먼저 parameter 와 argument 가 필요하다. 선언된 변수들과 할당된 값도 필요하다. 여러가지 블록이 있을 수 있으므로 블록에 대한 정보도 필요하다. 이러한 여러 정보가 실행 컨텍스트를 구성한다. 실행 컨텍스트가 구성될 때 환경레코드를 구성한다. 환경레코드는 두 단계로 실행된다. 먼저 생성단계, 후에 실행 단계를 차례로 거친다. 생성 단계는 실행 컨텍스트를 생성하고 선언문만 레코드에 기록한다. 실행 단계에서 선언문 외 나머지 코드를 실행한다. 호이스팅의 발생원인은 var 의 경우 생성 단계에서 선언 부분이 기록되면서 초기화를 동시에 한다. 그래서 실행 단계 때 호이스팅 현상이 발생하면서 값이 undefined 가 뜬다. 반면 let 과 const 는 생성 단계에서 마찬가지로 실행 컨텍스트를 구성하지만 초기화를 하지 않는다. 그래서 var 와 마찬가지로 호이스팅 현상이 일어나지만 레퍼런스 에러가 발생한다. 값이 아예 없기 때문이다. 만약 현재 실행 컨텍스트 내에서 찾을 수 없는 환경이 있다면 outer 로 간다. outer 는 스택상 바로 아래 위치한 실행 컨텍스트다. outer 에서 찾을 수 없다면 다음 outer 로 간다. 이렇게 하나 하나 방문해 마지막에 위치한 global EC 까지 간다. 전역 실행 컨텍스트에서도 찾을 수 없다면 레퍼런스 에러다. 하지만 outer 에서 찾을 수 있다면 탐색 과정은 종료 하고 더 이상 찾지 않는다. 그래서 변수 등을 참조할 때 현재의 실행 컨텍스트에서 가장 가까운 컨텍스트의 값이 참조된다. 실행 컨텍스트는 코드의 전 과정을 마칠 경우 스택에서 사라진다. 마지막으로 전역 실행 컨텍스트 까지 실행되면 스택은 완전히 텅 비게 된다.

profile
개발자 공부중

0개의 댓글