스코프란?
- 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다.
- 스코프는 식별자가 유효한 범위이다.
- 스코프는 식별자 이름의 충돌을 방지한다.
스코프의 구분
Global Scope (전역 스코프)
- 코드의 가장 바깥 영역
- 코드 어디서든지 참조가능
Local Scope (Function-level Scope, 지역 스코프)
- 함수 몸체 내부
- 함수 자신의 지역 스코프와 하위 스코프에서만 참조가능
스코프 체인
- 스코프 체인은 함수의 중첩에 의해 스코프가 계층적으로 연결된 것이다.
- 변수를 참조할 때 자바스크립트 엔진은
- 변수를 참조하는 코드의 스코프에서 시작하여
- 스코프 체인을 통해 상위 스코프 방향으로 이동하며 선언된 변수를 검색한다. (역은 X)
- 이를 통해 상위 스코프에서 선언한 변수를 하위 스코프에서도 참조할 수 있다.
프로토타입이란?
프로토타입 체인
- 특정 프로퍼티에 접근할 때 자바스크립트 엔진은
- 해당 객체의 프로퍼티에서 시작하여
- 프로퍼티가 없으면 프로토타입 체인을 통해 [[Prototype]] 참조를 따라 상위 프로토타입의 프로퍼티를 순차적으로 검색한다.
스코프 체인 vs 프로토타입 체인
스코프 체인 | 프로토타입 체인 | |
목적 | ✔️ 식별자 검색을 위한 메커니즘 | ✔️ 상속과 프로퍼티 검색을 위한 메커니즘 |
최상위 | ✔️ 전역 스코프 | ✔️ null |
'TIL > JavaScript' 카테고리의 다른 글
[240130] this (0) | 2024.01.30 |
---|---|
[240130] 렉시컬 환경, 렉시컬 스코프 (1) | 2024.01.30 |
[240130] 자바스크립트의 객체 생성 방법(객체 리터럴 vs new Object() vs 생성자 함수 vs 클래스) (1) | 2024.01.30 |
[240129] 프로토타입, [[Prototype]] vs __proto__ vs prototype 프로퍼티 (0) | 2024.01.29 |
[240126] 실행 컨텍스트 - (1) (0) | 2024.01.26 |