var 함수는 요즘에는 잘 사용하지 않는다.
es5전까지는 변수를 선언할 수 있는 유일한 방법이였다고한다.
하지만 다음과 같은 특징때문에 요즘은 사용하지 않는 변수이다.
변수 중복 선언 허용
var x = 1;
var y = 1;
var x = 100;
var y;
console.log(x); // 100
console.log(y); //1
함수 레벨 스코프
var x = 1;
if(true){
var x = 10;
}
console.log(x); // 10
변수 호이스팅
// 이 시점에는 변수 호이스팅에 의해 이미 foo변수가 선언되었다(1. 선언단계)
// 변수 foo는 undefined로 초기화된다(2. 초기화 단계)
console.log(foo); // undefined
// 변수에 값을 할당(3. 할당 단계)
foo = 123;
console.log(foo); // 123
// 변수 선언은 런타임 이전에 자바스크립트 엔진에 의해 암묵적으로 실행된다.
var foo;
var 키워드의 단점을 보완하기 위해 ES6에서는 새로운 변수 선언 키워드로 let과 const가 도입됐다. let 키워드의 특징은 다음과 같다.
변수 중복 선언 금지
블록 레벨 스코프
let foo = 1; // 전역 변수
{
let foo = 2; // 지역 변수
let bar = 3; // 지역 변수
}
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
변수 호이스팅
let foo = 1; // 전역변수
{
console.log(foo); // ReferenceError: Cannot acess 'foo' before initailization
let foo = 2; // 지역 변수
}
상수를 선언하기 위해 사용한다.