예를 들어, var 로 선언한 변수는 함수 내에서 선언된 변수이므로, 함수 내에서 어디에서든 사용 가능합니다.
function exampleFunction() {
var x = 1;
if (true) {
var x = 2; // 이전에 선언한 x 변수를 덮어쓰게 됩니다.
console.log(x); // 2
}
console.log(x); // 2
}
반면에, let 은 블록 범위를 가지므로 블록 내에서만 사용 가능합니다.
function exampleFunction() {
let x = 1;
if (true) {
let x = 2; // 새로운 x 변수가 선언됩니다.
console.log(x); // 2
}
console.log(x); // 1
}
var은 변수를 선언하기 전에 사용할 수 있습니다. 이렇게 사용하면 변수가 아직 선언되지 않았음에도 불구하고, 에러가 발생하지 않고 undefined 값을 가집니다. 이를 호이스팅이라고 합니다.
console.log(x); // undefined
var x = 1;
하지만 let으로 선언된 변수는 호이스팅이 발생하지 않으므로, 선언하기 전에 사용하면 에러가 발생합니다.
console.log(x); // ReferenceError: x is not defined
let x = 1;
var로 이미 선언된 변수를 다시 var로 선언하면, 값이 변경됩니다.
var x = 1;
var x = 2;
console.log(x); // 2
하지만 let으로 이미 선언된 변수를 다시 let으로 선언하면, 에러가 발생합니다.
let x = 1;
let x = 2; // SyntaxError: Identifier 'x' has already been declared
console.log(x);