[모딥다] JS (5) - var , let ,const 키워드와 블록 레벨 스코프
1. var 변수 문제점
1) 변수 중복 선언 허용
2) 함수 레벨 스코프
: var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정함.
: 따라서 함수 외부에서 var로 선언한 변수는 코드 블록 내 선언해도 모두 전역 변수가 됨.
3) 변수 호이스팅
: 변수 선언문이 스코프의 선두로 끌어 올려진 것처럼 동작함
2. let 키워드
: 변수 중복 선언 금지
: 블록 레벨 스코프 - 모든 코드 블록을 지역 스코프로 인정하는 블록 레벨 스코프를 따름
: 변수 호이스팅 발생 X
: var 키워드와 달리 "선언 단계" 와 "초기화 단계"가 분리되어 진행 된다.
: 따라서 초기화 단계 실행되기 이전에 변수에 접근하려고 하면 참조 에러가 발생함
: 스코프의 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 구간을 일시적 사각지대라고 함(TDZ)
: let 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니기 때문에 window.foo 등으로 접그 ㄴ불가.
: 보이지 않는 개념적인 블록인 "실행 컨텍스트" 내에 존재하게 된다.
3. const 키워드
: const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화 해야함.
: 재할당이 금지된다.
: 재할당이 금지된 변수인 상수를 표현하는데 사용하기도 함.
: const 키워드로 선언된 변수에 객체를 할당한 경우 값을 변경할 수 있다.
const person = {
name = "Lee",
};
// 객체는 변경 가능한 값이므로 재할당없이 값 변경 가능
person.name = "Kim";
console.log(person); // { name : "Kim" }
: 재할당을 금지하는 것이지 불변을 의미하진 않음
: 프로퍼티 동적 생성, 삭제, 프로퍼티 값의 변경을 통해 객체를 변경하는 것은 가능함.
4. 결론
: 되도록 const 키워드로 변수 선언하는 습관을 기르자!