Javascript에서 변수를 선언하는 방법은 3가지가 있다.
var 과 let, const의 대표적인 차이점은 아래와 같다.
여기서 의문 var가 함수 레벨 스코프이면 함수 밖에서는 선언을 할수없는가?
아니다 함수 밖에서도 선언이 가능하다, 그렇다면 함수 레벨 스코프라고 말하는게 맞는가라는 의문이 생긴다.
여기서 스코프란
더보기
결과적으로 함수 코드 블록 이외에 생성된 var 변수는 전부 전역변수가 되어 전역 변수 남발될 가능성이 생긴다.
var age = 21;
if(age >= 19){
var result = true;
}
console.log(result); // true
// if문 내부에 선언한 result 변수가 전역변수로 선언되어 result 값이 true로 할당되어 찍힌다.
for(var i = 0; i < 3; i++){
console.log(i); // 0 1 2
}
console.log(i); // 3
// for문의 변수 선언문에서 선언한 변수를 for문 외부에서 참조할 수 있다.
var로 선언한 변수는 선언 전에 사용해도 에러가 나지 않지만 let, const는 에러가 발생합니다.
2-1. var의 경우 호이스팅이 되면서 초기값이 없으면 자동으로 undefined를 초기값으로하여 메모리를 할당하기에 에러가 발생하지 않습니다.
var는 이미 선언된 이름과 같은 이름으로 변수를 재선언해도 에러가 나지않지만 let, const는 에러가 발생합니다.
var, let은 변수 선언 시 초기 값을 주지않아도 되지만 const는 반드시 초기값을 할당해야합니다.
var, let은 값을 재할당할 수 있지만, const는 한번 할당한 값을 재할당할 수 없습니다.
(변경 가능한 값인 객체는 재할당 없이도 직접 변경 가능합니다.)
(새로운 값을 재할당하는 것은 불가능하지만 프로퍼티 동적 생성, 삭제, 프로퍼티 값의 변경을 통해 객체를 변경하는 것은 가능합니다. )