선언 방법
/* var 타입 */
var name = '이동혁';
/* let 타입 */
let old = '27';
/* const 타입 */
const id = 'hyuk';
var
Scope 관점
변수가 함수 내에서만 유효합니다.
function () {
var x=10;
}
console.log(x); // 유효하지않음
Hoisting 관점
변수 선언은 최상단으로 올려지지만, 값은 hoisting 되지 않습니다.
console.log(x); // undefined 출력
var x = 100;
재선언 / 재할당 관점
재선언이 가능하고, 변수의 값을 변경(재할당)할 수 있습니다.
var x = 10;
var x = 100;
console.log(x); // 100 출력
let
Scope 관점
블록 Scope 관점으로, 블록 {} 안에 있어야만 접근이 가능합니다.
if (1) {
let x=10;
}
console.log(x); // 접근 불가
Hoisting 관점
선언은 호이스팅되지만, 접근 시 에러가 발생합니다.
console.log(x); // 에러
let x = 100;
재선언/재할당 관점
재선언이 불가능합니다. / 재할당은 가능합니다.
let x = 10;
let x = 100; // 에러
Const
Scope 관점
let과 마찬가지로 블록 스코프를 따릅니다.
Hoisting 관점
let과 동일하게 호이스팅은 되지만, 선언 이전에 접근하면 에러가 뜹니다.
재선언 / 재할당 관점
재선언과 재할당 모두 불가능하지만, 객체나 배열같은 참조형 데이터는 내부 값 변경이 가능합니다.
const x = 10;
x = 20; // 에러
const arrX = [1,2,3,4,5];
arr.push(6); // 6이 push됨
console.log(arrX); // [1, 2, 3, 4, 5, 6] 출력
어느 것을 선택해야할까?
일반적으로 const를 많이 사용하지만, 상황에 맞게 적절히 사용하면 되겠습니다.
학습할 때는 let을 사용해도 되고, 실제 서비스 개발에서는 const를 사용하는 식으로요.