var
문은 변수를 선언하고, 선택적으로 초기화할 수 있다.var x = 1;
if (x === 1) {
var x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 2
const
선언은 블록 범위의 상수를 선언합니다. 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없습니다const number = 42;
try {
number = 99;
} catch (err) {
console.log(err);
// expected output: TypeError: invalid assignment to const `number'
// Note - error messages will vary depending on browser
}
console.log(number);
// expected output: 42
let
구문은 블록 유효 범위를 갖는 지역 변수를 선언하며, 선언과 동시에 임의의 값으로 초기화할 수도 있다.let x = 1;
if (x === 1) {
let x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 1
var
는 함수 레벨 스코프이고 let
, const
는 블럭 레벨 스코프.
var
로 선언한 변수는 선언 전에 사용해도 에러가 나지 않지만 let
, const
는 에러가 발생.
var
는 이미 선언되어있는 이름과 같은 이름으로 변수를 또 선언해도 에러가 나지 않지만 let
, const
는 이미 존재하는 변수와 같은 이름의 변수를 또 선언하면 에러가 납니다.
var
, let
은 변수 선언시 초기 값을 주지 않아도 되지만 const
는 반드시 초기값을 할당해야 합니다.
var
, let
은 값을 다시 할당할 수 있지만 const
는 한번 할당한 값은 변경할 수 없습니다(단, 객체 안에 프로퍼티가 변경되는 것까지 막지는 못합니다).
var
는 변수를 재 선언 해도 에러가 발생하지 않는다.
var name = 'king'
console.log(name) // king
var name = 'th'
console.log(name) // th
유연한 변수 선언으로 간단한 테스트에는 편리 하지만, 코드량이 많아 진다면 어디에서 어떻게 사용 될지도 파악하기 힘들 수 있다.
그래서 ES6 이후, const
와 let
이 추가 되었다.
선언 방식만 바꾸어 본다.
const name = 'king'
console.log(name) // king
cosnt name = 'th'
console.log(name)
// "SyntaxError: Unexpected identifier
let name = 'king'
console.log(name) // king
let name = 'th'
console.log(name)
// "SyntaxError: Unexpected identifier
둘 다 변수 재 선언이 불가능 하다.
그럼 const
와 let
의 차이점이 무엇일까?
const
는 재할당이 불가능하고,
let
은 재할당이 가능하다.