: 우선 스코프란, "범위"라고 해석 할 수 있다.
js에서도 범위란 의미를 가지며 좀 더 접근해서 보자면, "식별자 접근 규칙에 따른 유효 범위"라고 할 수 있다. 여기서 식별자는 "변수", "함수", "클래스"를 말하며 범위를 나누는 기준은 중괄호(블록) 또는 함수에 의해 나눠진다. 나눈 범위를 우리는 스코프라고 부른다.
스코프의 종류에는 한번 지정하면 모든곳에서 사용 할 수 있는 전역 스코프(Global scope)와 블록이나 함수 내부에 선언하여 특정 부분에서만 사용 할 수 있는 지역 스코프(Local scope)가 있다.
전역 스코프(Global scope)
: 전역 스코프는 블록이나 함수 바깥에 선언 함으로서 어느 위치에서 불러올수 있다. 하지만 이점을 반대로 생각하면 다른곳에서 선언된 변수를 변경하면 바깥에 선언된 변수도 같이 변경 되기 때문에 이 점을 유의해서 사용해야 한다.
지역 스코프(Local scope)
: 지역 스코프는 블록이나 함수 안쪽에 선언 함으로서 선언한 변수나 함수 안쪽에서만 사용 할 수있다. 이점만 보면 불편해보이지만 스코프오염 위험이 있는 전역 스코프에 비해 안전하기 때문에 지역스코프를 더 선호한다.그리고 지역스코프에는 함수 스코프와 블록 스코프라는 것들이 있다.
지역변수는 전역변수보다 더 높은 우선순위를 가진다.
var :
유효 범위 : 함수 스코프
값 재할당 : 가능
재선언 : 가능
let :
유효 범위 : 블록 스코프 / 함수 스코프
값 재할당 : 가능
재선언 : 불가능
const :
유효 범위 : 블록 스코프 / 함수 스코프
값 재할당 : 불가능
재선언 : 불가능
블록스코프안에서 let과 const로 선언한 변수는 스코프 안에서만 참조가 가능하지만 var로 선언한 변수는 블록스코프를 무시하고 스코프 울타리 밖에서도 접근이 가능하다.(var는 함수스코프 말만 듣는다.) 따라서 var는 왠만하면 선언하지 않는게 좋다.