javaScript 실행컨텍스트와 콜 스택

정성현·2022년 5월 17일
1

항해99

목록 보기
18/33

컨텍스트

실행 컨텍스트 찾아보기에 앞서 실행 컨텍스트를 한국말로 번역을 해보자면 실행문맥이라는 말이된다. 컴퓨터에서 컨텍스트란 하나의 작업이라고 정의 할 수 있다.

js에서 말하는 실행 컨텍스트란 무엇일까?
코어 자바스크립트 책에서 실행컨텍스트란 다음과 같이 이야기하고있다.

실행 컨텍스트란 실행할 코드에 제공할 환경 정보들을 모아놓은 객체로서, 동일한 스코프에 있는 코드들을 실행할 때 필요한 환경 정보를 모아 컨텍스트를 구성하고, 이를 호출 스택(콜 스택)에 쌓아서 실행 순서를 보장합니다.

실행 컨텍스트가 구성되는 요소는 다음과 같이 구성됩니다.

  • 변수 객체(arguments, variable)
  • scope chain
  • this

그렇다면 실행 컨텍스트의 종류는 무엇이 있을까요?
실행 컨텍스트는 다음과 같이 2가지 종류로 나뉘어집니다.

  • 전역 컨텍스트: 특정 함수가 실행되지 않는 한 전역 컨텍스트에서 실행됩니다.
    여기서 변수 객체를 생성하는 대신 this를 전역 객체(global object)를 활용한다.

  • 함수 컨텍스트: 함수가 실행될 때마다 실행 컨텍스트가 생성되고, 함수가 동작을 다하면 콜스택에서 삭제된다.

콜스택

// --------------- (1)
var a = 1;
function outer() {
    function inner() {
        console.log('inner function:: ', a);
        var a = 3;
    }
    inner(); // --------------- (2)
    console.log('outer function:: ',a);
}
outer(); // --------------- (3)
console.log('outer::', a);

가장 먼저 자바스크립트 파일이 열리는 순간 전역 컨텍스트가 활성화됩니다. 따라서 전역 컨텍스트가 콜 스택에 쌓입니다. 그리고 outer 함수가 호출되면 자바스크립트 엔진은 outer에 대한 환경 정보를 수집해서 outer 실행 컨텍스트를 생성한 후 콜스택에 담습니다. 전역 컨텍스트와 관련된 코드의 실행을 중단하고 outer 실행 컨텍스트와 관련된 코드를 순차적으로 실행합니다. 다시 inner 함수의 실행 컨텍스트가 콜 스택의 가장 위에 담기면 outer 컨텍스트는 중단하고 inner 함수 내부 코드를 진행합니다. 실행이 종료되면 콜 스택에서 제거되고 그 다음 순서에 있는 코드를 이어서 진행합니다.

profile
I want to be programmer

1개의 댓글

comment-user-thumbnail
2022년 10월 13일

잘보고 갑니다! 감사합니다!

답글 달기