스코프란?
- 스코프(유효범위)는 자바스크립트를 포함한 모든 프로그래밍 언어의 기본적이며 중요한 개념!
- 모든식별자(변수이름, 함수이름, 클래스이름)는 자기가 어느 위치에 선언되는지에 따라서 다른코드가 자신을 참고할 수 있는 범위가 결정이 된다.
- 이 떄 결정되는 범위를 스코프라고 하고, 다시 말하면 스코프는 식별자가 유효한 범위를 의미.
var x = 'global'; //전역 => 어디서든 참조 가능
function foo () {
var x = 'function scope'; //지역 => 함수 내부에서만 참조 가능
console.log(x);
}
foo(); // function scope
console.log(x); // global
- 위의 두 변수 x는 식별자 이름은 동일하지만 자신이 유효한 범위, 스코프가 다른 별개의 변수.
- 스코프라는 개념이 없으면 어떤 변수를 참조해야하는지 알 수 없으므로 충돌이 일어나므로 같은 이름을 가진 변수를 프로그램 전체에서 하나밖에 사용할 수 없음.
- 컴퓨터에서도 폴더가 다르면 같은 파일명이나 폴더명을 사용하는게 가능한데 그게 스코프의 역할을 디렉토리 구조가 해주기 때문이다.
- 따라서 같은 스코프 내에서는 같은 이름의 식별자를 사용할 수 없다.

- 전역은 코드 가장 바깥 영역을 의미
- 전역은 전역 변수와 전역 스코프를 만들고 어디서든 참조할 수 있다
- 지역은 함수 몸체 내부를 의미
- 지역은 지역 변수와 지역 스코프를 만들고 자신의 지역 스코프와 하위 스코프에서 유효
: 전역으로 선언된 x와 y는 어디서든 참조 가능
outer함수 내부에 선언된 z는 outer함수 내부와 하위 지역 스코프인 inner 함수 내부에서 참조 가능
inner함수 내부에 선언된 x는 inner함수 내부에서만! 참조 가능