이 글은 kwangsunny님의 tistory를 참고해서 작성 한 것입니다.
실행 컨택스트는 2가지의 종류를 가지고 있다
1. Global Execution Context - 스크립트가 처음 실행될때 생성된다.
2. Function Execution Context - 함수가 호출될때 생성된다.
일반적으로 함수를 호출할 때 실행되는 함수 자원을 생각하면 쉽다. 조금 더 어렵게 풀어쓰면 현재 실행중인 코드에 대한 세부 정보(제어 흐름의 위치, 선언된 변수와 함수, this, argments 등)를 담고 있는 데이터 구조이다.
실행 컨텍스트는 호출이 되면 'call stack'이라는 자료구조에 저장되어 실행된다. stack은 말 그대로 쌓는다는 의미로 마지막에 들어온 데이터가 가장 처음에 실행되며 처음으로 들어온 데이터가 가장 마지막에 실행되는 구조이다(FILO : first in last out)
실행 컨텍스트의 예를 들어보자.
<script>
// 스크립트 실행 -> Global Execution Context 가 생성되고 스택에 push된다.
function A(){
B(); // 함수B 의 실행 컨택스트가 생성되고 스택에 push.
}
function B(){
console.log('done!');
}
A(); // 함수A 의 실행 컨택스트가 생성되고 스택에 push.
</script>
위의 코드가 진행되는 순서를 그림으로 표현하면 아래와 같다.
자바스크립트에서 재귀함수를 작성하다보면 가끔 'Maximum call stack'이라는 에러를 마주한적이 있다. 이는 스택이 가지고 있는 한계를 초과해서 실행 컨택스트가 push 되었기 때문에 나타나는 에러이다.