본문 바로가기
TIL

TIL #9) 자바스크립트에서 실행 컨텍스트

by 해룸 2024. 1. 8.

Today I Learned

실행 컨텍스트

실행 컨텍스트란 실행할 코드에 제공할 환경정보들을 모아놓은 객체이다.

자바스크립트는 어떤 실행 컨텍스트가 활성화되는 시점에 다음과 같은 일을 한다.

 

1. hoisting(선언된 변수를 위로 끌어올림)

2. 외부환경정보 구성

3.  this 값 설정

=> 이런 현상때문에 JS에서는 다른 언어와 다른 특징들이 나타난다.

 

call stack

스택의 한 종류(stack: LIFO, 마지막에 들어간게 제일 먼저 나옴)

가장 위에 쌓여있는 컨텍스트와 관련된 코드를 실행하는 방법으로 코드의 환경 및 순서를 보장할수있다.

특정 실행 컨텍스트가 생성되는 시점이 콜스택의 맨 위에 쌓이는 순간을 의미한다.

현재 실행할 코드에 해당 실행 컨텍스트가 관여하게 되는 시점을 의미한다.

 

실행 컨텍스트 객체의 실체(= 담기는 정보)

1. VariableEnvironment(VE)

2. LexicalEnvironment(LE)

  • VE와 LE는 완전히 같은것이라 볼 수 있으나, VE는 선언시점의 snapshot, LE는 변경사항을 실시간으로 반영한다는 점이 차이가 있다. 
  • 현재 컨텍스트 내의 식별자 정보(record)
  • 외부환경정보(outer)

3. ThisBinding

 

LE(1) - environmentRecord(= record)와 호이스팅

1. 현재 컨텍스트와 관련된 코드의 식별자 정보들이 기록된다.(record)

2. 수집대상정보: 함수에 지정된 매개변수 식별자, 함수자체, var로 선언된 변수 식별자 등

3. 컨텍스트 내부를 처음부터 끝까지 순서대로 훑어가며 수집(실행 x)

 

호이스팅 법칙

호이스팅은 변수 정보 수집 과정을 이해하기 쉽게 설명한 가상개념이다.

1. 매개변수 및 변수는 선언부를 호이스팅한다.

2. 함수 선언은 전체를 호이스팅한다.

3. 함수선언문, 함수표현식

- 함수선언문의 경우 hoisting에 의해 함수 전체가 올려진다!

  협업을 많이 하고 복잡한 코드일수록, 전역공간에서 이루어지는 코드 협업일수록 함수 표현식을 활용하는 습관을 들이자.

 

LE(2) - 스코프, 스코프체인,  outer

스코프

1. 식별자에 대한 유효범위를 의미

2. 대부분 언어에서 존재한다.

 

스코프 체인

식별자의 유효범위를 안에서부터 바깥으로 차례로 검색해 나가는것

 

outer

스코프 체인이 가능토록 하는것(외부 환경의 참조정보)