본문 바로가기
Language/JavaScript

[JavaScript] Execution context and the call stack

by 며루치꽃 2021. 1. 11.

 

compiling이 끝났을 때, 코드가 실행되었을 때, global execution context가 제일 먼저 실행됩니다. 

top level code는 함수를 밖에 있는 코드를 실행합니다. 함수는 개발자들이 호출했을 때만 실행합니다.

실행 context은 추상적인 개념입니다. 실행 context는 기본적인 환경이라고 정의하고 필요한 함수에 전달 된 지역 변수 또는 인수와 같은 모든 정보를 저장합니다. global context는 하나 뿐이며, 항상 기본 context로 존재하고, 최상위 코드가 실행되는 곳입니다. 만들어진 실행 global execution context를 실행합니다. 이과정에서는 CPU processing이나 기계어를 받습니다. 

top level code 실행이 끝나면 함수가 실행되고 callback을 기다립니다.

함수가 호출될 때마다 Call Stack을 구성하게 되고, 모든 함수의 실행이 완료되면 엔진은 기본적으로 Call back 함수가 도착할 때까지 기다립니다. 

실행 context의 내부

1) variable environment: 모든 변수와 함수 선언이 포함되는데 함수에 들어가는 매개변수들도 포함됩니다.

2) Scope chain

3) this keyword

 

중요한 점은 화살표 함수에 속하는 실행 컨텍스트는 자체 인수 키워드를 얻지 않으며 this 키워드도 얻지 않습니다. 

대신에 화살표 함수는 argument object를 이용하고 가장 가까운 부모 함수로부터 this 키워드를 받습니다. 

 

 

이 코드의 예를 들면 Global context를 갖고 first, second 함수의 context를 각각 갖습니다. 

Global context는 name 변수, first, second 함수의 함수 선언을 갖습니다. x는 함수 호출이 될 때 알 수 있기 때문에 unknown으로 나옵니다. 

화살표 함수가 아니라 arguments 객체도 있습니다. 그리고 이 객체는 배열입니다. 호출 될 때 함수에 전달된 모든 인수를 포함합니다.

 

호출 순서

1) Global 

2) first()

3) second() 

4) second() 실행이 끝남에 따라 pop

5) first() 실행이 끝남에 따라 pop

6) 브라우저 실행이 끝나면 Global context가 pop

댓글