책읽기/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는 재할당을 금지할 뿐 불변을 의미하지는 않는다. 원시값은 변경 불가능하지만 객체의 값은 변경 가능하다.