함수 레벨 스코프 -> 함수 외부의 변수는 모두 전역변수 -> 전역변수를 남발
var 키워드 생략 -> 암묵적 전역변수를 양상할 가능성
변수 중복 선언 허용 -> 의도하지 않은 변수값 변경
이러한 대부분의 문제는 전역변수 때문에 발생, 변수의 스코프는 좁을수록 좋다
var 타입의 문제를 해결하기 위해서 ES6 은
let
과const
를 도입
블록 레벨 스코프
변수 중복 선언 금지
호이스팅
let foo = 1; // 전역 변수
{
console.log(foo); // ReferenceError: foo is not defined
let foo = 2; // 지역 변수
}
블록내부에서 foo 는 후에 선언 되었으므로 참조에러가 발생
let 과 대부분 동일
let 은 재할당 자유, const 는 재할당 불가 - 선언시에 할당해야함
재할당이 불가능하므로 상수로 이용된다
const타입의 객체가 생성되면 객체 내부의 프로퍼티는 변경될 수 있다
권장하는 변수 사용법
const 를 기본적으로 사용 + 재할당이 필요한 경우 let 사용
부득이한 경우가 아니면 var 는 사용하지 않는다