
console.log(x); // undefined (호이스팅 때문에 선언은 되었으나 초기화는 안 된 상태)
var x = 10;
console.log(x); // 10
var y = 5;
var y = 6; // 재선언 가능
console.log(y); // 6
let a = 10;
a = 20; // 재할당 가능
console.log(a); // 20
let b = 5;
// let b = 6; // 오류: 동일 스코프 내에서 재선언 불가
if (true) {
let x = 10;
}
console.log(x); // ReferenceError: x is not defined (블록 스코프 때문)
const c = 10;
// c = 20; // 오류: 재할당 불가
console.log(c); // 10
const obj = { name: 'Alice' };
obj.name = 'Bob'; // 객체 내부 프로퍼티는 변경 가능
console.log(obj); // { name: 'Bob' }
var: 함수 스코프
let, const: 블록 스코프
var: 호이스팅 시 값이 undefined로 초기화
let, const: 호이스팅되지만 TDZ로 인해 초기화 전 사용 시 에러 발생
var: 재선언 가능
let, const: 재선언 불가
var, let: 재할당 가능
const: 재할당 불가