[JavaScript] 모던 JS Deep Dive 15장

ubin·2023년 10월 11일

JavaScript

목록 보기
17/21
post-thumbnail

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

  • ES5까지 변수 선언은 var 키워드로 밖에 못했다

var 키워드의 특징

  • 변수 중복 선언 허용
    • 초기화 문이 있는 중복 선언은 값의 재할당
    • 초기화 문이 없는 선언은 무시됨
  • 함수 레벨 스코프
    • 오로지 함수의 코드 블록만을 지역 스코프로 인정함
    • 일반 코드 블록 내에서 선언해도 모두 전역 변수로 선언됨
    • 의도치 않은 전역 변수 사용 남발
  • 변수 호이스팅
    • 변수 호이스팅(선언 단계+초기화 단계)에 의해 변수 선언문 이전에 참조 가능
    • 단 할당문 이전엔 undefined로 반환됨
    • 가독성 떨어지고 오류 발생시킬 여지 존재

15.2 let 키워드

  • var 키워드의 단점을 보완하기 위해 나온 새로운 변수 선언 키워드

let 키워드의 특징

  • 변수 중복 선언 금지
    • let 키워드로 이름이 같은 변수 선언시 문법 에러 발생
  • 블록 레벨 스코프
    • 모든 코드 블록을 지역 스코프로 인정함
  • ⭐️변수 호이스팅
    • 변수 호이스팅이 발생하지 않는 것은 아님, 기존 방식과 다를 뿐.
    • let 키워드로 선언된 변수는 선언 단계와 초기화 단계가 분리되어 진행
    • 초기화 단계가 실행되기 전에 변수 참조시 참조 에러 발생
    • 일시적 사각지대: 스코프 시작 지점부터 초기화 단계 시작 지점까지 변수 참조 불가
  • 전역 객체와 let
    • var 키워드로 선언한 전역 변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역은 모두 전역 객체 window의 프로퍼티가 됨
    • 하지만 let 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아님

15.3 const 키워드

  • 상수를 선언하기 위해 사용되지만 반드시 상수만을 위해 사용되지는 않음
  • let 키워드와 거〰의 동일함

const 키워드의 특징

  • 변수 선언시 반드시 선언과 초기화를 동시에 해야 함
    • 그렇지 않으면 문법 에러 발생
    • 변수 호이스팅이 존재는 하지만 let 키워드와 비슷하게 발생하지 않는 것처럼 동작함
    • 블록 레벨 스코프 가짐
  • 재할당 금지
    • var let 키워드와 달리 const 키워드로 선언한 변수는 재할당 금지
  • 상수
    • const 키워드로 선언한 변수에 원시 값을 할당한 경우 변수 값을 변경할 수 없음
    • 상태 유지와 가독성, 유지보수의 편의에 좋음
    • 일반적으로 상수의 이름은 SNAKE_CASE로 표현
  • const 키워드와 객체
    • const 키워드로 선언된 변수에 객체를 할당한 경우 값을 변경 가능
    • const 키워드는 재할당을 금지할 뿐 ‘불변’을 의미하는 것은 아님
    • 하지만 변수에 할당된 참조값은 안변함

15.4 var vs. let vs. const

  • 변수 선언에는 기본적으로 const 사용하면서 재할당이 필요한 경우에만 let 사용 추천

사용 권장 방법

  • ES6를 사용하면 var 키워드 사용 비추
  • 재할당이 필요한 경우에만 let 키워드 사용 추천, 대신 변수 스코프는 최대한 좁게
  • 변경이 발생하지 않고 읽기 전용으로 사용하는 원시 값과 객체에는 const 키워드 사용 추천
profile
프론트엔드 개발자가 되고싶은 코린이⌨️

0개의 댓글