
자바스크립트 코드가 실행될 때마다 "실행 컨텍스트"라는 실행 환경이 생성되는데
코드가 실행되는 동안 스코프, 변수, 함수 및 this 바인딩 정보를 관리하는데 중요한 역할을 합니다.
실행 컨텍스트는 크게 전역 컨텍스트, 함수 컨텍스트로 나뉘며, 각각 코드의 실행 환경을 설정합니다.
자바스크립트는 단일 스레드로 동작하기 때문에
실행 컨텍스트는 콜 스택(Call Stack)을 통해 순차적으로 처리됩니다.
실행 컨텍스트는 콜 스택이라는 구조에서 관리는데 콜 스택은
LIFO (Last In First Out) 구조로 가장 마지막에 추가된 실행 컨텍스트가 먼저 실행됩니다.
함수가 호출될 때마다 새로운 실행 컨텍스트가 콜 스택에 쌓이고,
함수 실행이 완료되면 해당 컨텍스트가 스택에서 제거됩니다.
자바스크립트는 단일 스레드 기반 언어이기 때문에, 한 번에 하나의 실행 컨텍스트만 실행됩니다.
실행 컨텍스트 내부에는 렉시컬 환경이라는 데이터 구조가 존재하는데
이 구조는 변수와 함수 같은 식별자들을 관리하며, 자바스크립트 코드의 상태를 유지합니다.
렉시컬 환경은 두 가지 주요 구성 요소로 나뉩니다.
// 코드 실행 시 생성되며, globalVariable이라는 전역 변수를 선언
let globalVariable = "global variable";
function parentFunction() {
// parentFunction 호출 시 새로운 컨텍스트가 생성되고, parentVariable이라는 지역 변수를 선언
let parentVariable = "parent variable";
// childFunction은 parentFunction 안에 정의되어 있으며, 호출 시 새로운 컨텍스트가 생성
function childFunction() {
let childVariable = "child variable";
console.log(globalVariable);
console.log(parentVariable);
console.log(childVariable);
// childFunction 내에서 전역 변수(globalVariable), 외부 함수의 지역 변수(parentVariable), 자신의 지역 변수(childVariable)에 접근 가능
}
childFunction(); // childFunction 호출
}
parentFunction(); // parentFunction 호출
실행 컨텍스트 : 코드 실행 환경으로, 스코프와 변수 정보를 관리
콜 스택 : 실행 컨텍스트가 쌓이는 구조, 마지막에 추가된 것이 먼저 실행
렉시컬 환경 : 변수와 함수 식별자를 관리하는 데이터 구조
( 변수, 함수들이 어떤 스코프를 참조할 수 있는지 등을 결정 )