스코프 체인
함수에서 '{ }'을 기준으로 어떤 값에 접근이 가능한가 불가능 한가를 뜻한다.
function c() {
console.log('c');
function b() {
console.log('b');
}
}
function a() {
console.log('a');
b();
}
a();
* b가 정의 되어있지 않다고 에러가 뜬다.
* b함수는 a에서 접근 가능한 스코프가 아니기 때문이다.
그림 참고

- c, a의 상위 스코프는 anonymous이고, b의 상위 스코프는 c이다.
- b가 호출 되면 우선 a함수의 스코프에서 함수b를 찾고, b가 없으면, a의 상위 스코프로 올라가 b의 함수를 찾는다.
- annoymous까지 올라가 찾고자 하는 함수, 변수가 없으면 스코프 에러가 발생한다.
- anonymous는 파일 전체, 최상위 스코프라고 생각하자
- b => c => anonymous 이런 관계를 Lexical Scope라고 한다.
정리
- 스코프란 '{ }'을 기준으로 함수, 변수가 접근 가능한 범위를 의미한다.
- 스코프 체인은 함수나 변수가 호출되면 우선 호출된 스코프에서 함수, 변수를 찾고, 호출한 스코프에 없으면 상위 스코프, 최상위 스코프까지 올라간다. 이렇게 스코프에서 상위 스코프로 이동하는것을 스코프 체인이라 한다.