실행 컨텍스트(Execution Context)란?
실행 컨텍스트는 JavaScript 코드가 실행되는 환경입니다.
코드가 실행될 때 변수, 함수, 객체가 어떻게 메모리에 할당되고, 그 순서는 어떻게 되는지를 결정하는 것이 실행 컨텍스트입니다.
실행 컨텍스트의 종류
JavaScript에는 두 가지 주요 실행 컨텍스트가 있습니다.
- 글로벌 실행 컨텍스트(Global Execution Context): 자바스크립트가 처음 시작될 때 생성되는 전역 컨텍스트입니다. 브라우저에서는
window
객체가 글로벌 실행 컨텍스트의 일부입니다. - 함수 실행 컨텍스트(Function Execution Context): 함수가 호출될 때마다 생성되며, 각 함수는 고유한 실행 컨텍스트를 가집니다.
실행 컨텍스트 생성 단계
실행 컨텍스트는 코드가 실행될 때 두 가지 단계를 거칩니다:
- 생성 단계(Creation Phase):
메모리 공간이 할당되며, 변수와 함수 선언이 먼저 등록됩니다.
이때 호이스팅이 발생하여 변수가 "undefined"로 초기화되거나, 함수는 완전히 메모리에 할당됩니다. - 실행 단계(Execution Phase):
실제 코드가 한 줄씩 실행되며, 변수에 값이 할당되고 함수가 실행됩니다.
실행 켄텍스트의 구성 요소
각 실행 컨텍스트는 다음과 같은 3가지 구성 요소로 이루어집니다:
- 변수 객체(Variable Object): 함수 선언, 변수 선언(hoisting 포함), 매개변수 등을 저장합니다.
- 스코프 체인(Scope Chain): 해당 컨텍스트와 외부 컨텍스트의 스코프를 참조합니다. 이를 통해 함수 내에서 외부 변수에 접근할 수 있습니다.
- this 바인딩: 현재 실행 중인 코드에서 this가 가리키는 객체를 나타냅니다.
실행 컨텍스트 예시
console.log(x); // undefined
var x = 5;
function foo() {
console.log(y); // undefined
var y = 10;
bar();
function bar() {
console.log("This is bar");
}
}
foo();
console.log(z); // ReferenceError: z is not defined
실행 흐름
- 전역 실행 컨텍스트가 생성되며,
x
와foo
함수 선언이 메모리에 할당 됩니다. 이때x
는undefined
로 초기화됩니다. console.log(x)
가 실행되며undefined
출력x = 5
가 실행되어x
에 5가 할당됩니다.foo()
함수가 호출되면, 함수 실행 컨텍스트가 생성됩니다.y
는undefined
로 초기화됩니다.bar()
함수는 완전히 메모리에 저장됩니다.
console.log(y)
가 실행되며undefined
출력.y = 10
이 실행되어y
에 10이 할당됩니다.bar()
함수가 호출되어This is bar
가 출력됩니다.console.log(z)
에서z
는 선언되지 않았으므로ReferenceError
가 발생합니다.
정리
- 실행 컨텍스트는 코드가 실행되는 환경이며, 각 실행 컨텍스트는 변수 객체, 스코프 체인, this 바인딩으로 구성됩니다.
- 호이스팅은 변수와 함수 선언이 실행 전에 메모리에 미리 할당되는 동작을 의미합니다.
var
로 선언된 변수는undefined
로 초기화되며,let
과const
는 호이스팅되지만 초기화되지 않고일시적 사각지대 (TDZ)
에 놓입니다.- 함수 선언은 완전히 호이스팅되며, 함수 표현식은 변수 호이스팅과 동일한 동작을 합니다.
'코드 > JavaScript' 카테고리의 다른 글
var, let, const 차이점과 일시적 사각지대(TDZ) (0) | 2024.10.15 |
---|---|
RESTful API란? (0) | 2024.06.20 |
Promise와 Async (0) | 2024.06.20 |
화살표 함수와 일반 함수의 차이점 (0) | 2024.06.19 |
호이스팅과 스코프 (0) | 2024.06.19 |