
사실 자바스크립트의 ES6 부터는 var 키워드는 사용을 지양하고있다. 'let'과 'const'로 대체가 가능하기 때문이다. 그래도 어떠한 차이점이 있는지 알아보자.
var로 선언한 변수는 오직 함수의 코드블록만이 지역 스코프를 가진다.
=> for,while,if 는 지역 스코프를 가지지 않음!
하지만 let과 const 로 선언한 변수는 모든 코드블록이 지역 스코프를 가진다.
=> for, while,if 같은 코드블록들도 마찬가지로 지역스코프를 가진다.
그래서 함수 이외의 코드블록 안에다 var로 변수를 선언시에 전역스코프로 되므로 개발자가 예상치 못한 작동이 일어날 수 있다.
var 키워드로 선언한 변수는 중복 선언이 가능하지만, let과 const로 선언한 변수는 중복 선언이 불가능하다.
호이스팅 자체의 뜻 : 코드가 실행되기 전에 JavaScript 엔진이 변수 선언과 함수 선언을 미리 메모리에 할당하는 것
var 키워드로 선언한 변수는 변수 호이스팅시 선언과 동시에 초기화가 이루어진다.
(단 할당문 이전에 값을 참조할시 undefined)
let,const 키워드로 선언한 변수는 변수 호이스팅시 선언만 이루어지고 초기화는 선언문에 도달할때 이루어진다.
오해 할 수 있는것이 선언문에 도달하기전 let,const 키워드로 선언한 변수를 참조하려고 할때 문법에러가 나서 마치 let과 const는 호이스팅이 발생하지 않는것처럼 보일 수 있다.
그래서 let과 const 키워드의 선언문이 도달하기 전에 있는 구간을 일시적 사각지대(TDZ)라 부른다.
var => 호이스팅시 선언단계와 동시에 초기화단계가 이루어짐
let,const => 호이스팅시 선언단계만 실행이되고 초기화단계는 선언문에 도달해야 이루어짐.
const는 언제 사용해야할까???
1. 선언한 변수가 상수값(MAX_LEVEL)이거나 변하지 말아야할 것(name)일 경우
2. 객체나 배열을 선언할경우.
=> 객체나 배열을 const 키워드로 지정해도 참조를 통하여 요소를 변경하는것이 가능하기 때문에 const 키워드를 사용하는것을 권장한다. 이는 의도치 않은 참조 변경에 방지하기 때문이다.
참조값 자체를 변경해야하는 경우는 다르다. 하지만 이를 의도하여 쓰는 상황은 많이 드물긴 한것같다.
기본적으로 const를 사용하고 필요시에 let을 사용하는것이 좋은 습관이다.
let은 언제 사용해야 할까?
보통 재할당을 해야하는지로 기준을 본다. 변수 선언 이후에 값이 재 할당 되는지를 파악하여 사용하면 된다.