1. var와 let의 차이
var
- 옛날 방식: 자바스크립트 초창기부터 사용되던 방식입니다.
- 특징 1: 블록 스코프를 무시. (이유: 함수 스코프라서)
블록 {} 안에서 선언하더라도, 블록 밖에서도 사용할 수 있습니다.
{
var x = 10;
}
console.log(x);
- 특징 2: 같은 이름의 변수 선언 가능
같은 이름으로 변수를 여러 번 선언해도 에러가 나지 않습니다.
var a = 5;
var a = 10;
console.log(a);
let
- 요즘 방식:
var의 단점을 개선한 새로운 방식입니다.
- 특징 1: 블록 스코프 준수
let으로 선언한 변수는 블록 {} 안에서만 접근할 수 있습니다.
{
let y = 20;
}
- 특징 2: 같은 이름의 변수 선언 불가
이미 선언된 이름의 변수를 다시 선언하려고 하면 에러가 납니다.
let b = 5;
- 특징 3: 선언 전에 사용할 수 없음
var와 달리, let으로 선언한 변수는 선언하기 전에 접근하면 에러가 발생합니다.
(이걸 "Temporal Dead Zone"이라고 합니다.)
let c = 30;
2. const
- 상수 선언: 변하지 않는 값을 저장할 때 사용합니다.
- 특징 1: 값 변경 불가
const로 선언한 변수는 값을 다시 할당할 수 없습니다.
const PI = 3.14;
- 특징 2: 객체와 배열의 내부는 변경 가능
const는 변수 자체를 바꿀 수 없지만, 객체나 배열의 내부 값은 바꿀 수 있습니다.
const person = { name: "Alice" };
person.name = "Bob";
console.log(person.name);
const numbers = [1, 2, 3];
numbers.push(4);
console.log(numbers);
- 특징 3: 선언과 동시에 초기화해야 함
선언할 때 값을 지정하지 않으면 에러가 납니다.
const age = 25;
⭐요약 비교
| 키워드 | 스코프 | 값 재할당 | 변수 재선언 | 선언 전에 사용 |
|---|
var | 함수 스코프 | 가능 | 가능 | 가능 (undefined) |
let | 블록 스코프 | 가능 | 불가능 | 불가능 (에러) |
const | 블록 스코프 | 불가능 | 불가능 | 불가능 (에러) |
언제 사용하면 좋을까?
let: 일반적으로 변수가 변할 수 있는 경우 사용합니다.
const: 변하지 않는 값이나 객체, 배열을 사용할 때 기본으로 사용합니다.
var: 옛날 코드 유지보수나 특수한 상황이 아니면 사용하지 않는 것이 좋습니다.
참고
함수 스코프와 블록 스코프
- 함수 스코프(Function Scope): 변수가 함수 안에서만 접근 가능. 함수 밖에서는 보이지 않음. (
var가 해당)
function test() {
var x = 10;
}
console.log(x);
- 블록 스코프(Block Scope): 변수가 블록
{} 안에서만 접근 가능. 블록 밖에서는 보이지 않음. (let과 const가 해당)
{
let y = 20;
}
console.log(y);