안쪽 스코프에서 바깥쪽 스코프로 접근할 수 있지만 반대는 불가능하다.
스코프는 중첩이 가능하다.
Local Scope와 Global Scope
Global Scope
Local Scope
⭐ 글로벌 스코프보다 우선순위가 높습니다.
지역변수는 전역변수보다 우선순위가 더 높다
- 스코프는 두가지 종류 블록 스코프와 함수 스코프가 있다.
- 화살표 함수는 함수 스코프가 아니다.

var는 함수 스코프로 함수내에서 모든 변수에 접근이 가능하고, 변수가 선언되기 전에 코드에서 참조될 수 있습니다.
let, const는 블록 스코프로 블록 외부에서 접근이 불가능하며 초기화가 되기 전에는 코드를 참조할 수 없습니다.
또한 let은 재할당이 가능하고, const는 재할당이 불가능합니다.
요즘에는 var 대신에 let과 const를 주로 사용합니다. 왜냐하면 var의 경우에는 중복된 이름을 선언했을 경우에 오류사항이 나지 않으므로, 배포시에 위험성이 있기 때문입니다.
var : 변수 재선언, 재할당 모두 가능하다, 함수레벨 스코프
let : 변수 재선언은 불가능, 재할당 가능(immutable true), 블록레벨 스코프
const: 변수 재선언, 재할당 불가능(immutable false), 블록레벨 스코프
⚠️ const의 주의할 점
상수는 재할당이 안된다고 했지만, const로 된 객체의 속성들은 수정될 수 있다.
기본형과 참조형의 개념을 알아야 하는데, 간단하게 설명하면 원시값을 할당한 변수를 참조하면 메모리에 저장되어 있는 원시값에 접근한다. 하지만 객체를 할당한 변수를 참조하면 메모리에 저장되어있는 참조값을 통해 실제 객체에 접근한다.
원시값을 갖는 변수의 값을 변경하려면 재할당 외에는 방법이 없지만, 객체는 변경이 가능한 값이다. 따라서 객체를 할당한 변수는 재할당 없이 객체를 변경하는 것이 가능하다.
재할당 없이 프로퍼티를 동적으로 추가할 수도 있고, 프로퍼티의 값을 갱신할 수도 있으며 프로퍼티를 삭제할 수 도 있다.
👇 전역에 var로 선언한 변수 a / 전역에 let으로 선언한 변수 b

👇 전역에 함수 선언식으로 등록한 함수 my()
