식별자가 유효한 범위
전역 스코프 : 가장 바깥쪽의 스코프
지역 스코프 : 함수의 몸체 내부
함수가 중첩될 수 있듯이 지역 스코프도 서로 중첩될 수 있다. 따라서 계층적 구조를 갖는다.
이렇게 스코프가 계층적으로 연결된 것을 스코프 체인이라 한다.
C나 Java 같은 언어들에서는 코드 블록(if, for, while, try/catch 등)이 지역스코프를 만든다. (블록 레벨 스코프)
반면, var 변수 같은 경우 함수의 코드 블록만을 지역 스코프로 인정한다.(함수 레벨 스코프)
하지만 ES6부터 블록 레벨 스코프를 지원하는 let, const가 도입되었다.
함수를 어디서 호출했냐가 아닌 함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다.
즉, 함수의 상위 스코프는 언제나 자신이 정의된 스코프이다.