렉시컬 스코프(Lexical scope)에 대해 설명해 주세요.

2024. 9. 2. 09:51코드잇 스프린트/위클리 페이퍼

렉시컬 스코프(Lexical scope)에 대해 설명해 주세요.

1. 스코프

  • 식별자의 접근 규칙에 따른 유효 범위
  • 범위 기준
    • 전역 스코프 : 모든 코드의 기본 범위
    • 모듈 스코프 : 모듈로 실행되는 코드 범위
    • 함수 스코프 : 함수로 생성된 범위
    • 블록 스코프 : 중괄호로 생성된 범위
  • 결정 기준
    • 동적 스코프 : 런타임 도중 결정된 범위
    • 렉시컬 스코프 : 선언 시점에 속한 맥락으로 결정된 범위

2. 실행 맥락

  • Execution Context
  • JS 코드가 실행될 때의 환경

2-1. 실행 맥락 종류

  • 전역 실행 맥락
    • Global Execution Context
    • 전역 공간에서의 선언
    • 프로그램 실행/종료 시 맥락 생성/폐기
  • 함수 실행 맥락
    • Function Execution Context
    • 함수 선언 내에서의 선언
    • 함수 실행/종료 시 맥락 생성/폐기

2-2. 콜 스택

  • 실행 맥락을 스택 형태로 관리하는 메커니즘

3. 실행 맥락 구조

3-1. 어휘적 환경

  • Lexical Environment
  • 해당 맥락의 식별자 저장
  • let/const 변수와 함수를 다룸

환경 레코드

  • Environment Record
  • 해당 맥락에 포함된 식별자 저장 및 값 관리

외부 환경 참조

  • Reference to the Outer Environment
  • 어휘적 중첩 구조(Lexical Nesting Structure)
  • 환경 레코드에서 식별자를 못 찾을 경우, 상위 어휘적 환경을 참조하여 탐색
  • 함수는 선언 시 내부 슬롯 [[Environment]]에 자신이 속한 실행 맥락의 어휘적 환경을 참조시키고, 이를 외부 환경 참조에 활용

3-2. 변수 환경

  • Variable Environment
  • 어휘적 환경과 동일한 구조이나, var 변수를 다룸

3-3. This 바인딩

3-4. 실행 맥락 구성 과정

생성 단계

  • 맥락 내 식별자 선언을 환경 레코드에 저장

실행 단계

  • 코드를 실행하며 식별자 업데이트

4. 클로저

  • 함수의 어휘적 환경 & 선언 때 속한 어휘적 환경의 조합, 또는 이러한 환경을 가진 함수 그 자체
  • 외부 함수가 콜 스택에서 제거되어도, 내부 함수가 외부 함수를 참조하므로 외부 함수의 스코프에 접근할 수 있게 됨
  • 함수 내 변수 데이터 보호 및 상태 관리에 활용 가능

5. 참고 자료