[JS] 스코프

스코프란?

각 식별자들의 유효 범위이다. (Global Scope / Function Scope / Block Scope)

cf. Module, eval('var x')

 

Lexical scope (렉시컬 스코프)

함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정되는 것이다.

즉, 함수를 어디서 정의하였는지에 따라 상위 스코프를 결정한다는 뜻이다.

"실행 시점"이 아니라, "선언 시점"에 스코프가 정해진다는 게 핵심.

 

다른 말로, 정적 스코프(Static scope)라 부르기도 한다.

 

cf. Dynamic scope와의 비교

렉시컬 스코프가 아닌 언어에서는 "어디서 호출되었는지" 기준으로 변수 스코프를 찾는다.
그걸 동적 스코프라고 한다. (호출된 시간 기반)

 

자바스크립트는 오직 렉시컬 스코프만 지원한다.

 

✔️ Lexical Scope Chain (단방향 Linked List)

렉시컬 스코프 체인은 현재 스코프에서 선언된 변수를 찾지 못할때,
바깥 스코프 → 더 바깥 스코프 → 전역 스코프까지 거슬러 올라가며 변수(식별자)를 찾는 구조
를 말한다.

 

이러한  "스코프의 연결 구조"를 체인이라고 부른다.

각 scope별 Lexical Environment가 생성되고, 이들 hierarchy는 단방향으로 연결되어 있다.

 

✔️ Identifier Resolution = "식별자 해석" + "스코프 체인" 

식별자를 찾아 떠나는 여행이라 볼 수 있다. 

  1. 어떤 식별자 x가 사용된다
  2. 현재 렉시컬 환경에서 찾는다
  3. 없으면 상위 환경으로 이동한다 (스코프 체인)
  4. 찾을 때까지 반복, 끝까지 못 찾으면 ReferenceError

 

 

 

'Dev > Javascript' 카테고리의 다른 글

[JS] 피보나치 수열 구현하기  (0) 2025.04.10
[JS] 클로저 (Closure)  (0) 2025.04.09
[JS] 실행 컨텍스트  (2) 2025.04.08
[JS] strict mode  (0) 2025.04.08
[JS] 디스트럭처링 할당 (해체 할당)  (0) 2025.04.08