본문 바로가기

JS

var, let ,const의 차이점

 

ES6가 나오면서 변수를 선언하는 키워드에도 많은 변화가 생겼다.

let과 const가 나오면서 var를 잘 사용하지 않게되었는데 왜 그렇게 됐는지 각자의 차이점을 알아보자.

 

var , let , const 의 차이 4가지

 1. 중복 선언의 가능 여부

 2. 재할당 가능 여부

 3. 변수 스코프의 차이

 4. 변수 호이스팅 방식

 

 

1. 중복 선언의 가능 여부

var = 중복해서 선언+초기화가 가능

마지막에 적힌 할당값이 변수에 저장된다. 선언,초기화에 제한이 없기때문에 혹시라도 까먹고 재선언을 하였을 때 에러가 뜨지않아 실수를 범하기 쉽다.

var x = 5;
console.log(x); // 5

var x = 10;
console.log(x); // 10

var x = 20;
console.log(x); // 20

이와 같이 재선언을 계속 할 경우 마지막 선언의 값을 가지게 된다.

 

 

let , const = 중복 선언이 불가능.

이미 위에서 똑같은 변수를 선언했다면 에러가 뜨면서 선언을 할 수 없게된다.

따라서 var에 비해 코드에 높은 안정성을 가지며 헷갈릴 일이 적어진다.

let x = 5;
console.log(x) // 5

let x = 10;
console.log(x) // SyntaxError: Identifier 'a' has already been declared

 

 

2. 재할당 가능 여부

var , let= 재할당이 가능하다.

위에서 선언한 값을 재할당하여 새로운 값으로 출력이 가능하다.

var x = 5;
x = 10;
console.log(x); // 10

let y = 10;
y = 20;
console.log(y) // 20

 

const = 재할당이 불가능하다.

const는 상수를 선언하는 명령어다. 변하지 않을 값을 선언하여  불필요한 재사용을 방지한다.

재할당이 가능한 var, let과는 다르게 const는 처음 선언할때 항상 값을 같이 할당해줘야한다.

const x = 5; // 항상 값을 같이 할당해줘야한다.
x = 10; // TypeError: Assignment to constant variable.

 

위와 같이 재할당을 하려고하면 타입에러가 발생한다.

 

 

3. 변수 스코프의 차이

var = 함수 스코프

var는 함수내부에 선언된 변수만 지역변수로 여기고, 그 외에는 전역변수로 인식한다.

function fn() {
    var x = 5;
    console.log(x);
}

fn(); // 5

console.log(x); // ReferenceError: x is not defined

 

 

let , const = 블록 스코프

let과 const는 함수 포함, if문 for문 등의 블록에서 선언된 변수도 지역변수로 인식된다.

 //if문
 if(true){
     let x = 5;
     console.log(x); // 5
 
 console.log(x); // ReferenceError: x is not defined
 }
 
 //for문
 for(let x=1; x<5; x++){
    console.log(x); // 1 2 3 4
 }
 
 console.log(x); // ReferenceError: x is not defined

 

 

4. 변수 호이스팅 방식

var = 변수 호이스팅이 발생한다.

console.log(x);  // undefined

var x = 5;

console.log(x);  // 5

위와 같이 콘솔로그를 찍은 후에 변수를 선언하여도 에러가 뜨지않고 undefined가 나온다.

var 변수 호이스팅 특징인 자바스크립트 엔진이 변수를 먼저 선언하고 코드를 실행하기 때문이다.

 

 

let , const = 변수 호이스팅이 발생하지만 var와는 다른 방식으로 발생된다.

console.log(x); // ReferenceError: x is not defined
let x = 5;
console.log(x); // 5

위와 같이 var 와는 다르게 변수는 선언해두지만 코드를 실행하는 과정에서 선언문을 만났을때 초기화를 진행한다. 

얼핏보면 호이스팅이 안되는것 처럼 보이긴 하지만 값을 참조할 수 없어서 그렇게 보이는 것 뿐이지 호이스팅은 정상적으로 발생하고 있다.

 

1.let과 const 위주로 변수를 선언한다.

2. 값을 재할당 할 필요가 없는 변수는 const를 사용하는것이 좋다.

3. var를 사용하는게 익숙한것이 아니라면 let과 const가 나온시점에서 굳이 사용할 필요가없다.

 

 

 

 

'JS' 카테고리의 다른 글

if문과 prompt를 사용하여 가위바위보 하기  (0) 2024.04.24
함수 prompt,alert와 조건문  (1) 2024.04.18
논리 연산자 - OR, And, Not  (0) 2024.04.17
연산자 - 단항, 비교, 부정  (0) 2024.04.16
자바스크립트의 기초  (0) 2024.04.11