자바스크립트에서 변수를 선언할 때 사용하는 var, let, const의 특징과 차이점에 대해 공부한 내용을 정리하였습니다.
값을 저장할 수 있는 메모리상의 공간
특정 이름(변수명,식별자)을 가지는 변수를 만들겠다고 컴퓨터에게 알리는 것.
let a;
변수에 값을 저장하는 것. 할당연산자=
를 사용
let a= 10;
a = 20;
변수 선언 후 처음으로 값을 저장하는 것
let
은 실행 중에 변할 수 있는 데이터(변수)를 저장하는 변수를 선언할 때 사용됩니다.
let
으로 선언된 변수는 같은 스코프 내에서 재선언
불가능
let a = 10;
let a = 20; // SyntaxError 발생
const a = 20; // SyntaxError 발생
let a= 10; // 전역 스코프
if(true){
let a = 20; // if문이 a의 스코프
console.log(a); // 20 출력
}
console.log(a) // 10 출력
스코프(scope)란 변수의 유효 범위입니다.
let
으로 선언된 변수의 값은 재할당
가능 let a= 10;
a = 20;
const
는 실행 중 변하지 않는 데이터(상수)를 담는 변수를 선언할 때 사용됩니다.
const
으로 선언된 변수도 let과 마찬가지로 같은 스코프 내에서 재선언
불가능
다른 스코프 내에서는 가능합니다.
const a = 10;
const a = 20; // SyntaxError 발생
let a = 20; // SyntaxError 발생
const
로 선언된 변수의 값은 재할당
불가능 const a = 10;
a = 20; // SyntaxError 발생
const
로 변수를 선언할 때는 선언과 동시에 초기화해줘야 합니다. const a;
a = 20;
//Uncaught SyntaxError: Missing initializer in const declaration
let과 const말고 var
를 사용하여 변수를 선언할 수 있습니다.
var
는 let과 const가 등장하기전까지 사용된 선언 키워드입니다. 사용방법은 동일합니다.
하지만 var
는 여러 문제점을 가지고 있어 권장되지 않습니다.
var
로 선언한 변수는 같은 스코프 내에서 재선언
해도 에러가 발생하지 않습니다.
var a = 10;
var a = 20;
const
가 없었을 때는 var
만으로 변수를 선언하였습니다. var
는 재할당
이 가능하기 때문에 상수를 선언할 수 없었습니다.
var
로 선언된 변수가 호이스팅될 때, 선언과 동시에 undefined로 초기화됩니다. console.log(a); // undefined 출력됨
var a=20;// 이 코드를 만날때 값이 20으로 할당됨
console.log(a); // 20 출력
호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에(변수 선언 코드를 만나기 전에) 미리 할당하는 것을 의미합니다.
let
과 const
의 경우, 호이스팅될 때 선언만 됩니다. (초기화 x)console.log(a); // Cannot access 'a' before initialization
console.log(b); // 동일 에러 발생
let a=20;// 이 코드를 만날 때 값이 20으로 초기화됨
const b=20;
let
의 경우, 변수 선언 코드를 만날 때 undefined로 초기화되거나 값이 할당됩니다. let a;
let b=20;
console.log(a); // undefined 출력됨
console.log(b); // 20 출력됨
호이스팅 되고 난 후 변수 선언 코드를 만나 초기화 되기까지를 TDZ(Temporal Dead Zone,시간상 사각지대) 라고 합니다.
var
로 선언한 변수의 스코프는 함수 스코프
or 전역 스코프
입니다. 따라서 블록 밖에서 접근 가능합니다.
if(true){
var a = 10;
}
console.log(a); // 10으로 출력됨
var는 블록을 무시하기 때문에 a는 전역변수
가 됩니다. 따라서 a가 정상 출력됩니다.
const
랑 let
로 선언한 변수의 스코프는 블록 스코프
입니다.
if(true){
let a = 10;
}
console.log(a);
// Uncaught ReferenceError: a is not defined 에러 발생
따라서 a는 if문 안에서만 접근 가능하고 ReferenceError가 발생합니다.
위와 같은 var
의 특징으로 인해, var
로 변수를 선언할 시 예상치 못한 오류나 의도하지 않은 결과를 야기할 수 있습니다.