모던JS딥다이브 공부정리용 글입니다.
15장_ let,const와 블록레벨스코프
15.1_ var키워드로 선언한 변수의 문제점
15.1.1_ 변수 중복 선언 허용
var x = 1;
var x = 2;
console.log(x)
15.1.2_ 함수 레벨 스코프
- var키워드는 함수 코드 블록만 지역 스코프로 인정
- for문의 변수 선언문의 var도 전역 변수가 되버림.
15.1.3_ 변수 호이스팅
- 변수 선언 이전에 undefined로 참조 가능
- var는 선언과 초기화가 동시에 이루어지기 때문.
- 이런 특성은 코드 흐름과 가독성을 안좋게 한다.
15.2_ let 키워드
15.2.1_ 변수 중복 선언 금지
15.2.2_ 블록레벨스코프
- let 키워드로 선언한 변수는 모든 코드블록을 지역 스코프로 인정(블록레벨스코프)
15.3.3_ 변수 호이스팅
- let을 선언한 변수는 호이스팅이 발생 but 안한것 처럼 동작
- let, const는 선언만 이루어지고 런타임때 초기화와 할당이 이루어짐.
- 그래서 TDZ가 생김
- TDZ . let const class 선언문
15.2.4_ 전역 객체와 let
-
var 키워드로 선언한 변수와 전역 함수, 그리고 선언하지 않은 변수에 값을 할당한 암묵적 전역은 window의 프로퍼티가 됨.
-
window 프로퍼티는 window를 생략하고 참조가능
-
let 키워드는 전역 객체의 프로퍼티가 아니고 보이지 않는 개념적 블록(전역 렉시컬 환경의 선언적 환경 레코드)내에 존재
15.3_ const 키워드
- const 키워드는 상수를 선언하기 위해 사용
15.3.1_ 선언과 초기화
- const로 선언한 변수는 반드시 선언과 동시에 초기화 해야한다
let a;
a = 1;
const b = 1;
15.3.2_ 재할당 금지
15.3.3_ 상수
- const에 원시값 할당 변경 불가
- 객체는 참조값이므로 참조값은 변하지 않지만 객체 프로퍼티는 변경 가능.
- 가장 최우선으로 써라
- let const 고민되면 const 쓰고 let으로 바꿔라.
15.3.4._ 객체
- const는 재할당을 금지할 뿐 "불변"을 의미하지 않는다.
- 객체 프로퍼티 변경 가능.
15.4_ var vs let vs const
- 변수 선언은 기본적으로 const / let은 재할당 필요한 경우 한정적 사용
- 변수의 스코프는 최대한 좁게 만들어라.