모던 자바스크립트 Deep Dive - 13. 스코프

둡둡·2024년 1월 6일

Modern Javascript Deep Dive

목록 보기
14/49

13.1. 스코프란?

  • 스코프(scope, 유효범위): 식별자가 유효한 범위
    • 모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 자신을 참조할 수 있는 범위가 결정됨
  • 키워드(var, let, const)에 따라 다르게 동작
  • 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙, 네임스페이스

13.2. 스코프의 종류

  • 코드는 전역(global)과 지역(local)으로 구분함
  • 변수는 자신이 선언된 위치에 따라 스코프가 결정됨
    • 전역에서 선언된 변수는 전역 변수, 지역에서 선언된 변수는 지역 변수

13.2.1. 전역과 전역 스코프

  • 전역이란 코드의 가장 바깥 영역
  • 어디서든 참조할 수 있음

13.2.2. 지역과 지역 스코프

  • 지역이란 함수 몸체 내부
  • 자신의 지역 스코프와 하위 지역 스코프에서만 유효함

13.3. 스코프 체인

  • 스코프 체인(scope chain): 함수 중첩에 의해 계층적으로 연결된 구조
  • 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 스코프에서 시작하여 상위 스코프 방향으로 이동하며 변수 검색
  • 스코프 체인은 물리적인 실체로 존재함
    • 자바스크립트 엔진은 렉시컬 환경(Lexical Environment)을 실제로 생성함

13.3.1. 스코프 체인에 의한 변수 검색

  • 변수를 참조하는 스코프에서 상위 스코프로 이동하면서 변수를 검색하고 존재하면 검색 종료함
  • 하위로는 이동하지 않음 -> 하위 스코프의 변수를 상위에서 참조할 수 없음
  • 상속과 유사함

13.3.2. 스코프 체인에 의한 함수 검색

  • 함수 이름과 동일한 이름의 식별자에 할당된 함수 객체도 변수와 동일하게 검색함

13.4. 함수 레벨 스코프

  • 함수 레벨 스코프: var 키워드는 함수의 코드 블록(함수 몸체)만을 지역 스코프로 인정함
    • 코드가 아닌 일반 조건문 등의 코드 블록 내에서 선언한 var는 전역 변수가 됨
    • 의도치 않은 전역 변수 값이 재할당 될 수 있음

13.5. 렉시컬 스코프

  • 렉시컬 스코프 (정적 스코프, static scope): 함수를 정의한 위치에 따라 스코프 결정
  • 함수 객체는 생성될 때 상위 스코프를 기억하고 정적으로 결정되어, 호출될 때마다 참조함

    [출처] 모던 자바스크립트, Deep Dive

profile
괴발개발라이프

0개의 댓글