var, let, const
- 자바스크립트는 함수 레벨 스코프를 따른다. (함수 코드 블록 내에서 선언된 변수는 함수 코드 블록 내에서만 유효)
- let, const는 var의 문제점(전역 변수 남발)을 보완하기 위해 도입되었다.
- let, const는 블록 레벨 스코프를 따른다({...}코드 블록 내에서만 유효)
- javascript는 모든 선언을 호이스팅한다.
호이스팅(Hoisting)이란, var 선언문이나 function 선언문 등을 해당 스코프의 선두로 옮긴 것처럼 동작하는 특성
- var 키워드로 선언된 변수는 선언과 초기화가 한번에 이뤄진다. 즉 선언문 이전에 변수에 접근해도 스코프에 변수가 존재하여 undefined를 반환한다. 이를 변수 호이스팅이라 한다.
- let 키워드는 선언단계와 초기화단계가 분리되어 진행된다.
- const는 let과 다르게 재할당이 금지된다(상수)
- const는 선언과 할당이 동시에 이뤄져야 한다(ex. const FOO;는 Syntax Error)
- 상수는 가독성과 유지지보수성을 위해 적극 사용해야 한다.
- const를 객체에 사용할 경우, 객체 자체에 재할당은 불가능하지만, 프로퍼티값은 변경할 수 있다. 따라서 객체 타입 변수 선언에는 const를 사용하는 것이 좋다.
- 변수 선언에는 기본적으로 const를 사용하고, 재할당이 필요한 경우에만 let을 사용하는 것이 좋다(선언 시점에는 재할당이 필요한지 잘 모르는 경우가 많으므로 일단 const를 사용하고 재할당이 필요하면 그때 let을 사용하는 것이 좋다)
- var키워드는 es6에서 가급적 사용하지 않는 것을 추천한다
출처: poiemaweb.com/es6-block-scope