[TIL] 스코프

sooyoung choi·2023년 10월 21일
0

Javascript, Node.js

목록 보기
8/37
post-thumbnail

실행컨텍스트와 this 복습하기 전에 스코프에 대해서 한번 정리해보자!


1. 스코프

  • 식별자가 유효한 범위
  • 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙
  • 스코프는 네임스페이스, 프로그래밍 언어에서는 스코프 통해 식별자인 변수 이름의 충돌 방지하여 같은 이름의 변수를 사용할 수 있게 한다.
  • 스코프 내에서 식별자는 유일해야 하지만 다른 스코프에는 같은 이름의 식별자를 사용할 수 있다.

1-1. 스코프 종류

구분설명스코프변수참조영역
전역코드의 가장 바깥 영역전역 스코프전역 변수어디서든 참조 가능
지역함수 몸체 내부지역 스코프지역 변수자신의 지역 스코프와 하위 지역 스코프에서 유효

1-2. 스코프 체인

  • 스코프가 계층적으로 연결된 것
  • 변수를 참조할 때 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 검색한다.
    - 이를 통해 상위 스코프에서 선언한 변수를 하위 스코프에서도 참조할 수 있다.
  • 함수는 중첩될 수 있으므로 함수의 지역 스코프도 중첩될 수 있다.
    - 스코프가 함수의 중첩에 의해 계층적 구조를 갖는다는 것을 의미
    - 중첩 함수의 지역 스코프는 중첩 함수를 포함하는 외부 함수의 지역 스코프와 계층적 구조를 갖는다.
    - 이때 외부 함수의 지역 스코프를 중첩 함수의 상위 스코프라고 한다.
  • 모든 스코프는 하나의 계층적 구조로 연결되며, 모든 지역 스코프의 최상위 스코프는 전역 스코프다.

1-3. 스코프 체인에 의한 함수 검색

  • 함수 선언문으로 함수를 정의하면 런타임 이전에 함수 객체가 먼저 생성된다.
  • 자바스크립트 엔진은 함수 이름과 동일한 이름의 식별자를 암묵적으로 선언, 생성된 함수 객체를 할당한다.
  • 스코프는 변수를 검색할때 사용하는 규칙이 아닌 식별자를 검색하는 규칙!

1-4. 함수 레벨 스코프,블록 레벨 스코프

블록 레벨 스코프

  • 코드 블록(if, for, while, ...)이 지역 스코프를 만든다.

함수 레벨 스코프

  • 함수의 코드블록만을 지역 스코프로 인정

1-5. 렉시컬 스코프

코드가 어디서 실행되며 주변에 어떤 코드가 있는지를 렉시컬 환경이라 부른다.
이를 구현한 것이 실행 컨텍스트, 모든 코드는 실행 컨텍스트에서 평가되고 실행된다.

  • 스코프 체인은 실행 컨텍스트의 렉시컬 환경을 단방향으로 연결(체이닝)한 것
  • 전역 렉시컬 환경은 코드가 로드되면 곧바로 생성되고 함수의 렉시컬 환경은 함수가 호출되면 곧바로 생성된다.

1-6. 동적 스코프 vs 렉시컬(정적) 스코프

동적 스코프렉시컬(정적) 스코프
스코프 결정 시점함수 호출될때함수 정의될때
  • 자바스크립트는 렉시컬 스코프를 따름
  • 함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다.
  • 함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향도 주지 않는다
  • 함수의 상위 스코프는 언제나 자신이 정의된 스코프다.

참고자료: 모던 자바스크립트 deep dive - 이웅모 저

0개의 댓글