1. let
- 블로 레벨 스코프 / 함수 레벨 스코프로 나뉜다.
1) 함수 레벨 스코프
- 함수 내에서 선언된 변수는 함수 내에서만 유효하며, 함수 외부에서는 참조할 수 없다.
- 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수인다.
2) 블록 레벨 스코프
- 블록 내 (if문 , for문) 내에서 선언된 변수는 코드 블록 내에서만 유효하며, 코드 블록 외부에서는 참조할수 없다.
전역변수 : 어느 위치에서든 호출하면 사용가능
지역변수 : 특정 구역 내에서 생성되어 그 구영에서만 사용가능
3) 변수 중복 선언 금지
- var키워드로는 동일한 이름을 갖는 변수를 중복으로 선언할 수 있다
- let 키워드로는 동리한 이름을 갖는 변수를 중복해서 선언할 수 없다, ( 중복 선언 시 문법 에러 발생)
4) 호이스팅
- var이나 function을 호이스팅이라 한다.
var키워드는 선언문 이전에 참조 하여도 에러 발생이 안됨 / let 키워드로 선언된 변수를 선언문 이전에 참조하면 에러가 발생된다.
- 선언단계 : 변수를 실행 변수 객체에 등록한다
- 초기단계 : 변수, 객체에 등록된 변수를 위한 공간을 메모리에 확보한다.
- 할당 단계 : 초기화된 변수에 실제 값을 할당한다.
5) const
- 상수를 위해 사용한다. / 블록 레벨 스코프를 갖는다.
- let 은 재 할당이 자유로우나 const는 재할당이 금지됨
- const는 선언과 동시에 할당이 이루어져야 한다. 이후 선언 시 에러 발생 됨
총정리
변수 선언에는 기본적으로 const를 사용하고 / let은 재할당이 필요한 경우에 한정해 사용하기 객체의 재할당하는 경우는 const를 사용하여 재할당을 방지해주는 것이 안전하다.