신입 개발자에서 시니어 개발자가 되기까지

[Javascript Deep Dive] 15장 let, const 본문

책읽기/Javascript Deep Dive

[Javascript Deep Dive] 15장 let, const

Jin.K 2022. 10. 3. 00:44

1. Var와 let의 차이

a. 이제서야 선언단계 / 초기화 단계를 이해했다.

  • Var는 자바스크립트 엔진에 의해 코드가 실행되기 이전(런타임 이전)에 이미 선언단계와 초기화단계를 완료한다. 초기화 단계는 선언된 변수에 undefined를 할당하는 것이다.b. 이에 반해 let은 변수 선언과 초기화 단계를 동시에 진행하지 않는다.
  • 런타임 이전에 변수의 선언은 암묵적으로 진행하지만, 초기화 단계는 런타임 시점에 변수 선언문에 도달 했을 때 실행한다.c. var의 재선언은 에러가 나지 않지만, let의 재선언은 에러가 난다.
  • d. const, let : 블록레벨 스코프 / var : 함수레벨 스코프
 
var let const
scope(유효범위) 함수레벨 블록레벨, 함수레벨 좌동
변수 선언과 초기화 단계 함께 진행 분리 분리
재선언 가능 불가 불가
호이스팅 o x x

2. Hoisting

- Var는 호이스팅이 되고, let은 호이스팅이 안되는 것처럼 동작한다. 안되는 것처럼 동작한다는 의미는 무엇일까
- 자바스크립트는 ES6에서 도입된 모든 선언을 호이스팅한다. 다만 let, const, class 선언문은 호이스팅이 발생하지 않는 것처럼 동작한다.

3. 전역 변수의 문제점

a. 긴 생명주기

    i. 전역객체와 생명주기가 동일하기 때문에 메모리 낭비가 될 수 있다.

b. 스코프 체인의 종점에 위치

    i. 변수를 검색할 때 지역스코프 -> 전역 스코프 순으로 검색하기 때문에 속도가 느릴 수 있다.

c. 네임스페이스 오염

    i. 다른 파일이라 하더라도, 전역객체를 공유하기 때문에 동일한 이름으로 선언된 변수나 함수가 존재할 수 있다.

4. Const 와 객체

  • Const는 재할당을 금지할 뿐 불변을 의미하지는 않는다. 원시값은 변경 불가능하지만 객체의 값은 변경 가능하다.