
실행 컨텍스트
자바스크립트 코드가 실행될 때 생성되는 "환경"
자바스크립트는 싱글 스레드 언어(한 번에 하나의 작업만 처리할 수 있는 프로그래밍 언어)이기 때문에 하나의 실행 컨텍스트만 활성화 됨
자바스크립트는 콜 스택을 사용하여 실행 컨텍스트를 관리
새로운 함수가 호출되면 해당 함수의 실행 컨텍스트가 콜 스택의 최상단에 쌓이고 함수가 종료되면 최상단의 실행 컨텍스트가 제거
실행 컨텍스트의 종류
1. 글로벌 실행 컨텍스트 : 자바스크립트 코드가 시작될 때 생성, 전역 코드나 전역 변수, 전역 함수가 실행되는 환경. 애플리케이션이 종료될 때까지 남아있음
2. 함수 실행 컨텍스트 : 함수가 호출될 때마다 생성되며, 함수가 종료되면 제거된다.
실행 컨텍스트의 구성 요소
1. 변수 환경 : 함수 내에서 선언된 변수나 함수 선언이 저장
2. 스코프 체인 : 변수 접근을 위한 참조 체인, 현재 실행 컨텍스트와 부모 컨텍스트의 변수를 참조 할 수 있음
3. this 바인딩 : this 키워드가 현재 실행 컨텍스트 내에서 가리키는 대상을 정의
이벤트 루프
실행 컨택스트와 이벤트 루프의 관계
function outerFunction() {
const outerVariable = "I'm an outer variable";
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
const closureFunc = outerFunction();
closureFunc(); // "I'm an outer variable"
위 코드에서:
outerFunction이 호출되면 outerVariable이라는 변수가 생성되고, innerFunction을 반환합니다.
outerFunction이 종료되어도, 반환된 innerFunction이 여전히 outerVariable에 접근할 수 있습니다.
이렇게 innerFunction은 외부 함수가 종료된 후에도 자신이 선언된 스코프(즉, outerFunction의 스코프)를 기억하는 클로저가 됩니다.
클로저의 특징
데이터 은닉과 상태 유지 예시
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
클로저의 실용적인 활용 예
1. 프라이빗 변수 : 클로저를 이용해 객체의 프라이빗 변수를 만들 수 있음. -> 객체 지향 프로그래밍에서 중요한 개념
2. 콜백함수 : 비동기 작업에서 클로저는 종종 콜백 함수로 사용되어 , 실행시점에서의 스코프 상태 기억
클로저 주의사항
=> 클로저는 함수가 선언될 당시 스코프를 기억하여, 외부 함수가 종료된 이후에도 해당 스코프에 접근할 수 있는 메커니즘입니다. 클로저를 사용하면 데이터 은닉과 상태 유지를 쉽게 할 수 있으며, 자바스크립트의 비동기 처리나 콜백 함수 등 다양한 상황에서 유용하게 사용됩니다.