실행 컨텍스트
실행 컨텍스트는 자바스크립트가 코드를 실행할 때 제공하는 환경 정보를 모아놓은 객체이다. 함수를 호출할 때마다 새로운 실행 컨텍스트가 생성된다.
실행 컨텍스트의 구성 요소
- VariableEnvironment: 현재 컨텍스트 내의 식별자들에 대한 정보와 외부 환경 정보를 담고 있다
- LexicalEnvironment: VariableEnvironment와 같지만 변경 사항이 실시간으로 반영된다
- environmentRecord: 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.
- outerEnvironmentReference: 외부 환경 정보를 참조한다
- ThisBinding: this 키워드가 참조하는 값을 담고 있다
environmentRecord에는 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다. 컨텍스트 내부 전체를 처음부터 끝까지 쭉 훑어나가며 순서대로 수집한다.
호이스팅
호이스팅은 변수 정보(environmentRecord)를 수집하는 과정을 더욱 이해하기 쉽도록 추상화한 개념이다. 자바스크립트에서 변수와 함수 선언을 코드의 최상단으로 끌어올리는 것처럼 동작하는 특성을 말한다.
함수 선언문 - 전체 함수가 호이스팅
console.log(hello()); // "Hello, world!"
function hello() {
return "Hello, world!";
}
함수 표현식 - 변수 선언부만 호이스팅
console.log(hello()); // TypeError: hello is not a function
var hello = function() {
return "Hello, world!";
};
스코프와 스코프 체인
스코프는 식별자의 유효 범위를 의미한다.
스코프 체인은 식별자의 유효 범위를 안에서부터 바깥으로 차례대로 검색해나가는 과정을 말한다. 이는 outerEnvironmentReference를 통해 이루어진다. outerEnvironmentReference는 바로 직전 컨텍스트의 LexicalEnvironment를 참조한다.
변수 은닉화
내부 함수에서 선언한 변수는 외부 함수나 전역 공간에서 선언한 동일한 이름의 변수에 접근할 수 없다. 이를 변수 은닉화라고 한다.
'JavaScript' 카테고리의 다른 글
| NestJS Custom Decorator로 유저 인증 처리하기 (0) | 2025.02.19 |
|---|---|
| TypeORM의 save() 사용 시 데이터 변경 감지 원리 이해하기 (0) | 2024.12.15 |
| 프로토타입 (0) | 2024.05.22 |
| this / 콜백 함수 / 클로저 (0) | 2024.05.20 |
| 자바스크립트의 데이터 타입 이해 (0) | 2024.05.17 |