var 를 대체하는 대채하는 변수 선언문으로 var 에 비해 더욱 더 엄격한 규칙을 적용한다.
var 의 Hoisting 이 일어나지 않는다.
호이스팅이란 자바스크립트 문이 실행되기 전에 var 변수를 상단으로 끌어올리는 것을 말한다.
그로 인해 var 는 변수 선언 위치 제약을 받지 않으며 Block 을 벗어나도라도 정상적으로 인식된다.
console.log(name);
let name = "hahaha";
//name이 존재하지 않는다는 오류가 발생
console.log(name);
var name = "hahaha";
//아무값도 할당된 것이 아닌 undefinded가 찍히게 된다.
let 은 호이스팅을 허용하지 않으므로 오류를 더욱 엄격하게 발생시켜 예상치 못한 케이스를 줄일수 있다
let 과 함께 선언에 쓰이지만 변수가 아닌 상수에 사용된다.
readonly 와는 약간의 차이가 있다.
const name = "gildong hong";
name = "chulsoo";
//name is read-only 라는 오류가 발생한다.
위와 같이 변경되는 값이 아닌 상수 값을 선언하는데 주로 사용된다.
const userObj = {
name : "gildong Hong"
};
userObj.name = "chulsoo";
//오류가 발생하지 않고 프로퍼티 변경이 가능하다
위와 같이 변수의 주소값이 바뀌지 않는 경우 내부 프로퍼티 변경이 가능하다.
const 와 let 은 block 을 엄격하게 적용한다.
if(true){
const firstName = "gildong";
let lastName = "Hong";
}
console.log(firstName);
console.log(lastName);
//firstName, lastName 모두 not defined 에러가 발생한다.
반면 var 의 경우 오류가 발생하지 않는다. 바로 hoisting 때문이다.
if(true){
var firstName = "gildong";
}
console.log(firstName);
//gildong 이 console 에 표시된다.
let 과 const 를 쓰자! 이제 var 는 안녕