var는 원조 변수선언 방식으로 동일한 이름으로 중복 선언이 가능
/* 1. 변수 중복 선언 허용 */
var msg = '안녕하세요';
console.log(msg);
/* var 키워드가 없는 것처럼 동작한다. */
var msg = '안녕히 가세요';
console.log(msg);
/* 초기화 문이 없는 중복 변수 선언은 무시된다. */
var msg;
console.log(msg); // 안녕히 가세요
함수내부가 아니면 전역 변수와 차이가 없는 스코프
var i = 0;
for(var i = 0; i < 10; i++){} // for문 i는 전역변수 i 랑 같은 취급
console.log(i); // 10
변수 호이스팅
var 키워드로 변수를 선언하면 변수 호이스팅에 의해 변수 선언문이 스코프의 선두로 끌어올려진 것처럼 동작함
실행 시 오류가 발생하지는 않지만 이는 프로그램의 흐름에 맞지 않고 가독성을 떨어뜨리며 오류를 만들 여지가 있음
console.log(test); // undefined
test = '반갑습니다';
console.log(test); // 반갑습니다.
var test;
var 키워드의 단점을 보완하기 위해 ES6에서는 새로운 변수 선언 키워드인 let, const를 도입
let은 같은 이름의 변수명으로 중복 선언은 불가능 하지만 재할당은 가능함
/* 1. 변수 중복 선언 금지 */
let msg = '안녕하세요';
let msg = '안녕히 가세요'; // 에러 발생
또한, let은 var와 다르게 블록 레벨 스코프이다.