본문 바로가기

Javascript

스코프

스코프

  • 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정 됨
  • 식별자가 유효한 범위
  • 자바스크립트의 경우 오직 함수에 의해서만 스코프가 생성

렉시컬 환경

  • 코드가 어디에서 실행되며, 주변에 어떤 코드가 있는지
  • 코드의 문맥이 이루어진 환경
  • 모든 코드는 실행 컨텍스트에서 평가되고 실행

전역 스코프

  • 전역에 변수를 선언하면 전역 스코프를 갖는 전역 변수가 됨
  • 전역 변수는 어디서든지 참조할 수 있음

지역 스코프

  • 지역에 변수를 선언하면 지역 스코프를 갖는 지역 변수가 됨
  • 지역 변수는 자신이 선언된 지역과 하위지역(중첩 함수)에서만 참조할 수 있음
  • 지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효

스코프 체인 : 스코프가 계층적으로 연결된 것

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

** 스코프 체인은 실행컨텍스트의 렉시컬 환경을 단 방향으로 연결한 것

** 전역 렉시컬 환경: 코드가 로드되면 곧바로 생성

** 함수의 렉시컬 환경: 함수가 호출되면 곧바로 생성

 

스코프

  • 블록 레벨 스코프: 모든 코드 블록(if, for, while, try/catch ...)이 지역 스코프를 만듦
  • 함수 레벨 스코프: var키워드로 선언된 변수는 오로지 함수의 코드블록(함수 몸체)만을 지역 스코프로 인정


  • 동적 스코프: 함수가 호출되는 시점에 상위 스코프 결정, 상위 스코프가 동적을 변경
  • 정적 스코프(렉시컬 스코프): 함수의 정의가 평가되는 시점에 상위 스코프 결정 (대부분의 프로그래밍 언어는 정적 스코프)
    • 함수를 어디서 정의했는지에 따라 상위 스코프 결정
    • 함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향 X
    • 함수의 상위 스코프는 언제나 자신이 정의된 스코프

 

스코프 체인

  • 식별자의 유효범위를 안에서 바깥으로 차례로 검색해 나가는 것

'Javascript' 카테고리의 다른 글

클로저  (0) 2023.01.06
실행 컨텍스트  (0) 2023.01.06
렉시컬 환경  (0) 2023.01.06
블록레벨스코프와 함수레벨스코프  (0) 2022.07.27
ES6 특징  (0) 2022.07.26