Deep Dive 13장 스코프

@hanminss·2021년 11월 29일
0

Deep Dive

목록 보기
7/16
post-thumbnail

13장 스코프

1. 스코프란?

  • 스코프 : 유효범위
  • var과 let,const각가 선언한 변수의 스코프는 각각 다르게 동작한다.
  • 모든 식별자는 자신이 선언된 위지에 의해 다른 코드가 식별자를 자신을 참조할 수 있는 유효 범위가 결정된다. 이를 스코프라한다.
  • 즉 스코프는 식별자가 유효한 범위
  • js 엔진은 이름이 같은 변수 중에서 어떤 변수를 참조해야 할 것인지 결정한다. 이를 identifier resolution 이라 한다.
  • js 엔진은 스코프를 통해 어떤 변수를 참조해야 할 것인지 결정한다.
  • 식별자의 이름은 유일해야 하지만 다른 스코프에는 같은 이름의 식별자를 사용할 수 있다.
  • var는 같은 스코프에서 이름의 중복을 허용하지만(변수값이 재 할당된다.) let이나 const는 중복을 허용하지 않는다.(syntax error)

2. 스코프의 종류

  • 코드는 전역(global)과 지역(local)로 구분할 수 있다.
  • 지역변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효하다.
  • 지역변수와 전역변수의 함수명이 같다면 지역 스코프에서는 지역변수를 불러온다. 이는 js 엔진이 스코프 체인을 통해 참조할 변수를 검색하기 때문이다

3. 스코프 체인

  • 함수안에 함수를 또 선언한다면 이를 함수의 중첩이라 한다.
  • 안쪽의 함수를 중첩함수, 바깥쪽의 함수를 외부함수라 한다.
  • 함수가 중첩될 수 있으므로 지역 스코프도 중첩될 수 있다.
  • 지역 스코프의 중첩되어 계층적으로 연결된 것을 스코프 체인이라 한다.
  • js 엔진은 변수를 참조할 때 참조하는 코드의 스코프를 기준으로 출발하여 상위 스코프로 이동한다.
  • 스코프 체인은 물리적으로도 존재한다. (렉시컬 환경에 존재하는데 23장에 자세히 나온단다.)

4. 함수 레벨 스코프

  • C, Java 등을 비롯한 대부분의 프로그래밍 언어는 함수 몸체만이 아니라 모든 코드블록이 지역 스코프를 만든다. 이를 블록 레벨 스코프 라 한다.
  • 하지만 자바스크립트에서는 var키워드로 선언된 변수는 오로지 함수의 코드블록만을 지역 스코프로 인정한다. 이를 함수 레벨 스코프라 한다.
  • 따라서 if , switch, for 등에 선언된 var 변수들은 전역변수가 될 수 있다.
  • es6에서 나온 let과 const는 블록 레벨 스코프를 지원한다.

5. 렉시컬 스코프

  • 프로그래밍 언어는 일반적으로 두가지 방식으로 함수의 상위 스코프를 결정한다.
  • 동적 스코프 : 함수를 어디서 호출했는지에 따라 함수의 상위 스코프를 결정한다.
  • 레시컬 스코프(정적 스코프) : 함수를 어디서 정의했는지에 따라 함수의 상위 스코프를 결정한다.
  • js는 레시컬 스코프를 따른다. 따라서 함수를 어디에서 정의했는지에 따라 상위 스코프를 결정한다.

0개의 댓글