스코프 (Scoope)

1Hoit·2023년 1월 16일
0

자바스크립트

목록 보기
4/25

스코프 (유효범위)

  • 식별자(변수나 함수, 클래스 이름 등)가 유효한 범위
  • 스코프를 통해 식별자의 충돌을 방지할 수 있다.

스코프 종류

코드는 전역과 지역으로 구분할 수 있다.

구분설명스코프변수
전역코드의 가장 바깥영역전역스코프전역변수
지역함수 몸체 내부지역스코프지역변수

지역 스코프의 종류

1.블록 레벨 스코프 범위 결정: {..}
(ES6의 화살표 함수는 블록 스코프로 취급된다.)
2.함수 레벨 스코프 범위 결정: 함수

스코프 체인

스코프는 함수의 중첩에 의해 계층적 구조를 갖는다.

  • 자바스크립트 엔진은 변수를 참조할 때 스코프 체인을 통해 상위 스코프 방향으로 이동하며 선언된 변수를 검색한다.
  • 하위 스코프에서 상위 스코프로는 접근할 수 있지만, 반대는 불가능하다. 즉, 단방향으로 이루어진다.
  • 자바스크립트는 렉시컬 스코프를 따르므로 함수의 호출 위치가 아닌 함수의 정의 위치에 따라상위 스코프를 결정한다.
    (렉시컬 환경은 추후에 정리하자.)

스코프와 var, let, const 키워드

변수 선언 키워드 세 가지의 ‘차이점’ 그리고 ‘스코프 유효 범위’는 아래와 같다.

  • const 키워드
    유효 범위 : 블록 스코프 / 함수 스코프
    값 재할당 : 불가능
    재선언 : 불가능

  • let 키워드
    유효 범위 : 블록 스코프 / 함수 스코프
    값 재할당 : 가능
    재선언 : 불가능

  • var 키워드
    유효 범위 : 함수 스코프
    값 재할당 : 가능
    재선언 : 가능

블록 스코프 안에서 let과 const 키워드로 선언한 변수는 스코프 안에서만 참조 가능하다.
그런데 var 키워드로 선언한 변수는 블록 스코프를 무시하고 스코프 밖에서도 접근 가능하다. (var는 오직 함수 스코프만 따른다.)
--> 그러나 블록 단위로 스코프를 구분했을 때, 훨씬 더 예측 가능한 코드를 작성할 수 있으므로 let과 const 키워드의 사용이 권장된다.

profile
프론트엔드 개발자를 꿈꾸는 원호잇!

0개의 댓글