[JS]15장 let, const & 블록레벨스코프

JH Cho·2022년 12월 15일
0

모던JS DeepDive 공부

목록 보기
16/27
post-thumbnail

모던JS딥다이브 공부정리용 글입니다.

15장_ let,const와 블록레벨스코프

15.1_ var키워드로 선언한 변수의 문제점

15.1.1_ 변수 중복 선언 허용

var x = 1;
var x = 2;

console.log(x) // 2

15.1.2_ 함수 레벨 스코프

  • var키워드는 함수 코드 블록만 지역 스코프로 인정
  • for문의 변수 선언문의 var도 전역 변수가 되버림.

15.1.3_ 변수 호이스팅

  • 변수 선언 이전에 undefined로 참조 가능
  • var는 선언과 초기화가 동시에 이루어지기 때문.
  • 이런 특성은 코드 흐름과 가독성을 안좋게 한다.

15.2_ let 키워드

15.2.1_ 변수 중복 선언 금지

  • 변수 중복 syntax error 발생

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_ 재할당 금지

  • const 재할당 금지

15.3.3_ 상수

  • const에 원시값 할당 변경 불가
  • 객체는 참조값이므로 참조값은 변하지 않지만 객체 프로퍼티는 변경 가능.
  • 가장 최우선으로 써라
  • let const 고민되면 const 쓰고 let으로 바꿔라.

15.3.4._ 객체

  • const는 재할당을 금지할 뿐 "불변"을 의미하지 않는다.
  • 객체 프로퍼티 변경 가능.

15.4_ var vs let vs const

  • 변수 선언은 기본적으로 const / let은 재할당 필요한 경우 한정적 사용
  • 변수의 스코프는 최대한 좁게 만들어라.
profile
주먹구구식은 버리고 Why & How를 고민하며 프로그래밍 하는 개발자가 되자!

0개의 댓글