1. 중복 선언 가능 여부
var 는 중복 선언이 가능한 반면, let 과 const 는 중복 선언이 불가하다
var a = 1;
var a = 3;
console.log(a);
// 3
let b = 1;
let b = 3;
console.log(b);
// Error : Identifier 'b' has already been declared.
const c = 1;
const c = 3;
console.log(c);
// Error : Identifier 'c' has already been declared.
2. 재할당 가능 여부
var 와 let 은 변수를 선언하는 키워드로, 변수 선언 및 초기화 이후 재할당이 가능하다.
const 는 상수를 선언하는 키워드로, 선언/초기화 이후 재할당이 불가하다.
또한 초기 선언 때 반드시 값을 할당해주어야되기도 한다.
var a = 1;
var a = 3;
console.log(a);
// 3
let b = 1;
b = 3;
console.log(b);
// 3
const c = 1;
c = 3;
console.log(c);
// Error : Assignment to constant variable
3. 스코프
var 는 function-level scope로 함수 내부에 선언된 변수만 지역 변수로 간주하며, 나머지는 모두 전역변수로 간주한다. 따라서 if문, for문 등의 코드 블럭 내부에서 선언을 하더라도 전역 변수로 간주된다.
let 과 const 는 block-level scope로 함수 내부 뿐만 아니라 코드 블럭 내부에서 선언을 하더라도 모두 지역 변수로 간주되어 외부에서 참조할 수 없다.
if ("test".length > 3) {
var a = 1;
}
console.log(a);
// 1
if ("test".length > 3) {
let b = 1;
}
console.log(b);
// Error: b is not defined
if ("test".length > 3) {
const c = 1;
}
console.log(c);
// Error: c is not defined
4. 호이스팅
var 는 변수를 선언함과 동시에 undefined 로 초기화되므로, 뒤에서 선언된 변수가 앞에서 참조되어도 에러가 나지않는다.
반면에 let 과 const 는 변수 선언과 초기화가 별개로 이루어져야하므로, 변수 선언만 호이스팅되어 그 값을 참조할 수는 없다. 뒤에서 선언된 변수가 앞에서 참조되면 값을 참조할 수 없어 에러가 난다.
console.log(a);
var a = 1;
// undefined
console.log(b);
let b = 2;
// Error: : b is not defined
console.log(c);
const c = 3;
// Error: c is not defined
'Javascript' 카테고리의 다른 글
Babel을 활용해 별칭 경로 설정하기 (0) | 2022.05.22 |
---|---|
Vanilla JS로 구현한 debounce로 성능 최적화하기 (0) | 2022.05.12 |
실행 컨텍스트와 클로저(Closure) (0) | 2022.04.25 |
HTML과 Javascript 연결하기 (0) | 2021.10.23 |