var는 함수 스코프를 가진다.
let & const 블록 스코프 -> tdz (temporal dead zone) -> 안전하게 코드 작성 가능
let은 재할당이 가능하지만 const는 재할당이 불가능함.
const는 재할당만 금지.
즉, 객체나 배열 같은 레퍼런스 객체들을 조작하는 것은 상관없다.
전역 공간이란 window와 global로 나뉠 수 있다.
브라우저 환경에서 돌아가는 경우는 window가 최상위,
NodeJS 환경에서 돌아가는 경우는 global이 최상위.
좋은 방법:
{
1: "전역 변수 x",
2: "지역 변수 o",
3: "window, global을 조작하지 않기",
4. "const, let 지향하기"
}
임시변수란 scope안에서 전역변수처럼 사용되는 변수
함수 스코프 안에 있는 임시변수도 함수가 커지면 전역 공간이나 다름 없는 상황이 발생할 수 있음.
임시변수를 제거해야 하는 이유:
{
1: 명령형으로 가득한 로직
2: 어디서 어떻게 오류가 났는지 디버깅을 하기 힘듬
3: 추가적인 코드를 작성하고 싶은 유혹에 빠지므로 코드 유지 보수가 힘들게 됨
}
해결책 -> 함수를 나눔, 바로 리턴, 고차함수(map(), filter(), reduce()), 선언형 프로그래밍
런타임 시 선언과 할당이 분리된 것