var를 지양하라

let과 const는 블록 스코프에 TDZ를 가지고 있어 안전하게 코드를 작성할 수 있다.

var name = '이름';
var name = '이름2';

변수명이 일치하는 변수를 하나 더 선언해도 아무 에러도 일어나지 않는다. 즉, 중복 선언이 가능하다.

console.log(name) // undefined

var name = '이름'

또한 호이스팅이 되기 때문에 선언하기 전에도 접근이 가능하다.

이에 비해 위의 var를 let이나 const로 변경하면 에러를 낸다. 즉, 더 안전하게 작성할 수 있는 것이다.

let과 const의 차이는 재할당이 가능한지의 여부이다.

var global = 'global'

if (global) {
	var global = 'local'

	console.log(global) // local
}

console.log(global) // local

var는 함수 스코프이기 때문에 해당 블록 스코프에서 재할당을 시키면 블록 바깥의 친구도 오염이 된다.

이를 let이나 const로 바꾸면 블록 바깥의 친구는 그냥 global로 오염되지 않고 찍힌다.

const의 객체 속성 변경은 가능하다. 재할당만 금지되어 있다.

const person = {
	name: 'kim',
	age: 30
}

person.name = 'park' // 가능

전역 공간 사용 최소화

전역은 최상위 환경을 이야기한다. window와 global로 나뉜다. 브라우저는 window, node는 global.