Javascript/core

var, let, const 비교하기

student513 2020. 12. 19. 16:02

javascript에는 변수를 선언할 수 있는 3가지 키워드가 있습니다.

그리고 이와 관련된 내용을 검색해서 들어오셨다면 셋이 어떻게 다른지 알고 싶으실 것입니다.

 

각설하고, var, let, const는 두 가지의 기준으로 비교할 수 있습니다.

  1. 재선언이 가능한가?

  2. 재할당이 가능한가?


var의 경우 재선언과 재할당이 모두 가능합니다.

var a = 5;
a = 4;
console.log(a) // 4 (재할당 ok)
var a = 3;
console.log(a) // 3 (재선언 ok)
var a;
console.log(a) // undefined (재선언 ok)

개인적으로 재선언이란 개념 자체가 바람직한 프로그래밍 문법이 아니라고 생각합니다.

변수의 값을 변경하고 싶다면 재할당으로도 충분하기 때문입니다.

이러한 불안정한 문법은 개발과정에서 의도치 않은 버그를 일으킬 소지가 많기 때문에 사용하지 않는 것을 강력히 권고드립니다.

대신 용도에 따라 아래의 let, const를 사용할 것을 추천합니다.


let의 경우 재선언은 불가능하고 재할당은 가능합니다.

 

let b = 10;
b = 5; 
console.log(b) // 5
let b = 3; // Uncaught SyntaxError: Identifier 'b' has already been declared

C언어나 JAVA에서 배운, 우리가 흔히 아는 그 변수입니다.

선언 후 값을 수정하고 싶은, 말 그대로 '변수'로써 사용하고 싶다면 let을 사용하시면 됩니다.


const의 경우 재선언과 재할당 모두 불가능합니다. 

const a = 5;
a = 3; // Uncaught TypeError: Assignment to constant variable.
const a = 5;
const a = 3; // Uncaught SyntaxError: Identifier 'a' has already been declared

const는 변수가 아니라 상수입니다. 말 그대로 변하지 않는 값입니다.

초기에 선언한 값만 유지하며, =(등호)를 이용한 재할당도 허용하지 않습니다.

 

'등호를 이용한 재할당'이라고 콕 집어 말씀드린 것은 배열이나 object의 값의 변경은 가능하기 때문입니다.

const arr = [];
arr.push(1);
arr.push(2);
console.log(arr); // [1,2]
const obj = {name: 'smith', age: 30};
obj.age = 20;
console.log(obj); // {name: 'smith, age: 20}

다만 arr에 다른 배열을 직접 할당하거나, obj에 다른 object를 직접 할당할 경우에는 재할당 오류 에러가 발생합니다

const arr = [1,2,3];
arr = [4,5,6; // Uncaught TypeError: Assignment to constant variable.

const obj = {a:1, b:3};
obj = {x:55, y:10); // Uncaught TypeError: Assignment to constant variable.

const는 같은 자료형으로 데이터를 재할당하는 것을 허용하지 않습니다.

 

+ var은 블록스코프에 의해 범위가 제한되지 않고 전역으로 선언이 됩니다