var, let, const는 자바스크립트에서 변수를 선언할 때 사용하는 키워드
var는 ES5까지 유일하게 쓰였지만, 단점을 보완하기 위해서 ES6에서 let과 const를 도입
*호이스팅 : 변수나 함수 선언이 해당 스코프의 최상단으로 끌어올려진 것처럼 동작하는 특성
1. var
- 스코프: 함수 스코프 (Function Scope)를 가지며, 변수가 선언된 함수 내부에서만 접근할 수 있다.
- *호이스팅: var로 선언된 변수는 호이스팅(hoisting)되어 변수 선언이 코드의 맨 위로 끌어올려진다. 단, 초기화는 이루어지지 않아 undefined 상태가 된다.
- 재할당/재선언: var로 선언된 변수는 재할당이 가능하고, 같은 스코프에서 재선언도 가능하다.
console.log(x); // undefined (변수 선언 전)
var x = 5;
var y = 1;
console.log(x); // 5 (변수 선언 후)
var x = 100;
var y;
console.log(x); // 100
console.log(y); // 1
var는 스코프와 호이스팅이 다소 불안정하게 작용할 수 있어서, 최신 코드에서는 잘 사용되지 않는 편
2. let
- 스코프: 블록 스코프(Block Scope)를 가집니다. 즉, 변수가 선언된 블록({}) 내부에서만 접근 가능
- * 호이스팅: let 역시 호이스팅되지만, 초기화는 선언문까지 지연되므로, 선언문 이전에 접근하면 ReferenceError가 발생
- 재할당/재선언: let으로 선언된 변수는 재할당이 가능하지만, 같은 스코프에서 재선언은 불가능
let y = 10;
if (true) { // 블록 스코프의 범위
let y = 20;
console.log(y); // 20
}
console.log(y); // 10
3. const
- 스코프: let과 동일하게 블록 스코프를 가진다.
- * 호이스팅: let과 마찬가지로 선언문 이전에 사용할 수 없다.
- 재할당/재선언: const로 선언된 변수는 재할당이 불가능하고, 같은 스코프에서 재선언할 수 없다. 선언 시 반드시 초기화가 필요
// 값을 변경하지 않을 변수를 선언
const z = 30;
// z = 40; // 30으로 선언하여 변경 불가능
// Error: Assignment to constant variable.
// const로 선언한 객체나 배열의 경우, 내부 속성이나 요소는 변경 가능
const obj = { name: "Alice" };
obj.name = "Bob"; // 가능
console.log(obj); // { name: "Bob" }
const는 상수와 같이 값을 변경하지 않을 변수를 선언할 때 주로 사용한다.
다만, const로 선언한 객체나 배열의 경우, 내부 속성이나 요소는 변경 가능하다.
요약
- var: 함수 스코프, 호이스팅됨, 재할당 및 재선언 가능
- let: 블록 스코프, 호이스팅됨(초기화 전 사용 불가), 재할당 가능, 재선언 불가
- const: 블록 스코프, 호이스팅됨(초기화 전 사용 불가), 재할당 불가, 재선언 불가
최신 자바스크립트에서는 주로 let과 const를 사용하는 것을 권장
'JS' 카테고리의 다른 글
| async/await (0) | 2024.11.11 |
|---|---|
| promise : 비동기 작업 여부 (0) | 2024.10.31 |
| 컨텍스트를 가리키는 키워드 this (0) | 2024.10.30 |
| Math : 표준 빌트인 객체 (0) | 2024.10.24 |
| 화살표 함수 (0) | 2024.10.17 |