프로그래밍/JavaScript

[모딥다] JS (5) - var , let ,const 키워드와 블록 레벨 스코프

JellyApple 2024. 12. 18. 00:25

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 키워드로 변수 선언하는 습관을 기르자!