Front/JavaScript

JavaScript) 변수 정리 : var, let, const

pogun 2025. 2. 20. 10:02

1. var (과거 방식, 사용 지양)

함수 스코프(Function Scope)

- var로 선언된 변수는 함수 내부에서만 유효하고, 블록({}) 내부에서는 제한되지 않음

재선언 가능

- 같은 변수명을 여러 번 선언해도 오류가 발생하지 않음

호이스팅(Hoisting) 발생

- 선언된 변수가 코드 최상단으로 끌어올려짐

- 하지만 undefined로 초기화되므로 예측하지 못한 오류가 발생할 수 있음

function example() {
    if (true) {
        var x = 10;
    }
    console.log(x);  // 10 (블록 범위 무시)
}

var a = 1;
var a = 2;  // 가능 (재선언 허용)

console.log(b);  // undefined (Hoisting 발생)
var b = 5;

결론: var는 예측하지 못한 오류를 유발할 가능성이 높아서 let과 const를 사용하는 것이 좋음


2. let (블록 범위 변수, 최신 문법)

블록 스코프(Block Scope)

- {} 내부에서 선언된 변수는 해당 블록 안에서만 유효

재선언 불가능, 재할당 가능

- 같은 변수명을 중복 선언할 수 없지만, 값을 변경할 수 있음

호이스팅 발생 (초기화 안 됨)

- var처럼 호이스팅이 되지만, 초기화되지 않아서 참조 전에 오류 발생

function example() {
    if (true) {
        let y = 20;
    }
    console.log(y);  // 오류 (y is not defined)
}

let a = 1;
let a = 2;  // 오류 (재선언 불가능)

console.log(b);  // 오류 (Cannot access 'b' before initialization)
let b = 5;

결론: let은 var보다 안전하고, 가변적인 값을 다룰 때 사용하면 좋음.


3. const (상수, 변경 불가)

블록 스코프(Block Scope)

- let과 동일하게 {} 내부에서만 유효

재선언 불가능, 재할당 불가능

- 한 번 값을 설정하면 변경할 수 없음

호이스팅 발생 (초기화 안 됨)

- let과 마찬가지로 선언 전에 접근하면 오류 발생

const PI = 3.14;
PI = 3.1415;  // 오류 (Assignment to constant variable)

const user = { name: "Alice" };
user.name = "Bob";  // 가능 (객체 속성은 변경 가능)
user = {};  // 오류 (객체 자체 변경 불가)

결론: const는 값이 변하지 않는 경우 사용하면 좋음. (단, 객체나 배열 내부 값은 변경 가능)


키워드 스코프 재선언 재할당 호이스팅 사용 추천 여부
var 함수 스코프 가능 가능 가능(undefined) 사용 지양
let 블록 스코프 불가능 가능 가능 (초기화 X) 사용 추천
const 블록 스코프 불가능 불가능 가능 (초기화 X) 상수에 사용