let,const 는 ES6(스크립트언어의 표준,규격)가 등장하면서 함께 등장한 변수 선언 방식
var는 ES6 등장이전 사용하던 변수 선언 방식
let
function hello(flag) { if (flag) { let text = 'hello'; } console.log(text); } hello(true);
text is not defined 로 text가 정의 되지 않았다는 오류를 확인 할 수 있다.
var
function hello(flag) { if (flag) { var text = 'hello'; } console.log(text); } hello(true);
hello가 출력되는것을 확인 할 수 있다.
이유는 스코프의 범위 때문인데 let과 const의 경우 블록 스코프로 {} 블록 내에서 정의한 변수의 경우 블록 안에서만 사용할 수 있지만 var의 경우 함수 스코프로 블록 내에서 정의한 변수라도 함수 범위 내에서 사용할 수 있다.
let
function hello(flag) { console.log(text); if (flag) { let text = 'hello'; } } hello(true);
var
function hello(flag) { console.log(text); if (flag) { var text = 'hello'; } } hello(true);
간단하게 설명하자면 JavaScript에서 변수를 선언할 때 선언, 초기화, 할당의 과정을 거친다.
var의 경우 호이스팅 과정에서 변수의 선언, 초기화까지 진행하기 때문에 undefined를 출력하고
let과 const의 경우 호이스팅 과정에서 선언만 진행되기 때문에 참조 오류가 발생한다.