실행 컨텍스트 (Execution Context)

sinf·2021년 11월 24일
0

javascript

목록 보기
6/10
post-thumbnail

실행 컨텍스트 (Execution Context)

실행 컨텍스트는 자바스크립트가 실행되기 위해 알아야 할 모든 정보를 담고 있다. 변수, 스코프, 함수 등 정보를 담고 있어 자바스크립트의 동작 과정을 이해하기 위해서 필요한 개념이다.

실행 컨텍스트의 종류

실행 컨텍스트는 전역 실행 컨텍스트 (Global Execution Context, GEC)와 함수 실행 컨텍스트 (Functional Execution Context, FEC)로 나눌 수 있다.

GEC는 오직 1개만 존재하며, 자바스크립트가 실행될 때 만들어진다.
FEC는 함수가 호출될 때 만들어진다. 존재하지 않을 수도 있고, 다수가 존재할 수 있다. (선언이 아닌 호출 시 생성)

실행 컨텍스트는 스택 구조로 적재된다. 함수 종료 시 소멸한다.
함수 내부에서 함수가 호출될 경우 함수가 계속 적재되고 종료하면서 소멸한다.

실행 컨텍스트가 가지는 값

변수 객체 (Variable Object)

실행 컨텍스트가 생성될 때, 변수 객체에는 변수, 매개변수와 인자, 함수의 선언이 포함된다.

전역 실행 컨텍스트의 경우 매개변수와 인자를 제외하고 전역 변수, 전역 함수에 대한 정보를 담고 있다.

함수 실행 컨텍스트의 경우 내부 함수, 지역 변수, 매개변수와 인자에 대한 정보를 담고 있다.

스코프 체인 (Scope chain)

스코프 체인은 배열의 형태를 가지고 있다.

전역 실행 컨텍스트의 경우 전역 객체 (자기 자신)에 대한 정보만 담고 있다.

함수 실행 컨텍스트의 경우 참조할 수 있는 객체에 대한 정보를 담고 있다.

위에서 본 예제를 다시 보면,

func2에서는 text라는 변수를 사용하고 있다. 이 변수는 전역 객체에 선언된 변수다. func2는 스코프 체인을 통해 상위 함수를 참조하고, 필요한 정보를 찾는다.

func2의 스코프 체인은 [{func2}, {func1}, {global}] 과 같다.

스코프 체인이 존재하기 때문에 상위 함수에서 선언된 변수나 함수에 대해서 참조할 수 있게 된다.

this

this가 가리키는 값을 저장한다. 값은 함수 호출 패턴에 따라 정의된다.

실행 컨텍스트의 생성과 실행 과정

실행 컨텍스트는 생성 단계와 실행 단계로 나눠볼 수 있다.

생성 단계 (creation phase)

생성 단계에서는 실행 컨텍스트의 뼈대를 만드는 것과 같다.

변수의 선언, 함수의 선언(주소를 할당한다.)이 이루어진다.

변수는 undefined 상태로 저장된다.

변수가 a = 3;과 같이 선언이 없이 할당만 이루어지는 경우 일단 선언되지 않고 지나간다.

실행 단계 (execution phase)

실행 컨텍스트가 실행되는 단계다.

실행 단계에서는 변수에 값을 할당한다.

이 때, a = 3;과 같이 선언 없이 할당만 이루어지는 변수에 대해서 스코프 체인을 통해 상위 스코프를 탐색하며 값을 할당한다.

모든 스코프 체인에 변수 a가 없는 경우는 전역 객체에 a 변수를 선언하고 값을 할당하게 된다.


참고

profile
항상 개발자가 되기 위해 노력! 👏🏻

0개의 댓글