es5와 달라진 문법을 알아보자.
var, let, const
es5에서는 변수 선언방법이 var 밖에 없었지만, es6에서 부터 let, const 가 추가되었다.
var
let, const
변수 혹은 함수가 선언될 때, 해당 스코프에서 가장 선두에서 동작하는 것 처럼 하는 것을 말한다.
console.log(foo); // undefined
var foo;
console.log(foo); // undefined
foo = 1; // 할당문에서 할당 단계가 실행된다.
console.log(foo); // 1
var 변수는 선언과 초기화가 동시에 일어난다. 이때 초기화는 undefined
로 된다.
변수 호이스팅이 일어나기 때문에, 변수 선언이 가장 먼저 되면서 동시에 undefined
로 생성된다.
console.log(foo); // ReferenceError: foo is not defined
let foo; // 변수 선언문에서 초기화 단계가 실행된다.
console.log(foo); // undefined
foo = 1; // 할당문에서 할당 단계가 실행된다.
console.log(foo); // 1
스코프의 선두단계에서 변수의 선언이 시작된다. 하지만 es6에서는 변수의 선언과 초기화가 동시에 일어나지 않는다. 선언만 해줬을 뿐, 어떠한 값도 없기 때문에, 처음에는 ReferenceError
가 일어나고, 그 후 초기화를 undefined
로 해준다.