모든 식별자(변수, 함수, 클래스 등)는 자신이 선언된 위치에 따라 참조할 수 있는 유효 범위(scope)가 결정된다. 이를 스코프라고 하며, 크게 전역 스코프와 지역 스코프로 나눌 수 있다.
| 구분 | 설명 | 스코프 | 변수 종류 |
|---|---|---|---|
| 전역 | 코드의 가장 바깥 영역 | 전역 스코프 | 전역 변수 |
| 지역 | 함수나 블록 내부 | 지역 스코프 | 지역 변수 |

예시 설명:
outer 함수 내부에서 선언된 z 변수는 지역 변수이며,outer 함수 내부와 그 하위 지역인 inner 함수에서도 참조할 수 있다.inner 함수 내부에서 선언된 x 변수는 inner 함수 안에서만 참조할 수 있다.outer 함수에서는 참조할 수 없으며, 참조 시 에러가 발생한다.let, const)let과 const는 코드 블록({})을 기준으로 스코프가 생성된다.if, for, while, try/catch 등 모든 코드 블록 내에서 유효한 스코프를 블록 레벨 스코프라 부른다.function bar() {
let x = 1;
let x = 2; // ❌ SyntaxError: Identifier 'x' has already been declared
}
bar();
var는 오직 함수 코드 블록만을 지역 스코프로 인식한다.
블록(if, for 등) 안에서 선언해도 함수 전체에서 접근 가능하다.
동일한 스코프 내에서 중복 선언이 허용되며, 의도치 않게 변수값이 덮어쓰일 수 있다.
function example() {
var y = 1;
var y = 2; // ✅ 가능하지만 예기치 않은 동작을 유발할 수 있음
console.log(y); // 2
}
example();