var 키워드로 선언한 변수의 문제점

var 키워드로 선언된 변수는 다른 언어와 구별되는 독특한 특징으로, 주의를 기울이지 않으면 심각한 문제를 발생시킬 수 있다.

변수 중복 선언 허용

함수 레벨 스코프

var i = 10;

for(var i = 0; i < 5; i++) {
	console.log(i)
}

console.log(i) // 5

변수 호이스팅

var 키워드로 선언한 변수는 런타임 이전에 자바스크립트 엔진에 의해 암묵적으로 선언 단계와 초기화 단계가 한번에 진행된다.

let 키워드

var 키워드의 단점을 보완하기 위해 ES6에서는 새로운 변수 선언 키워드인 let과 const를 도입했다.

변수 중복 선언 금지

let 키워드로 중복 선언하면 문법 에러(SyntaxError)가 발생한다.

var foo = 123;
var foo = 456;

let bar = 123;
let bar = 456; // SyntaxError: Indentifier 'bar' has already been declared

블록 레벨 스코프

let 키워드로 선언한 변수는 모든 코드 블록(함수, if문, for문, try/catch문 등)을 지역 스코프로 인정하는 블록 레벨 스코프르 따른다.