본문 바로가기
Frontend

var, let, const 차이

by yongmin.Lee 2020. 11. 8.

1. 변수 값의 변환

  재선언 재할당
var o o
let x o
const  x x

2. 변수의 스코프

- let과 const로 선언된 변수는 블록 레벨 스코프를 가지므로, {} 내부에 변수를 선언하면 해당 블록 내부에만 생명주기를 유지한다.

- var는 함수 레벨 스코프를 가지므로 블록 내부에 선언되어도 외부에서 접근할 수 있다.

3. 호이스팅

- 변수생성 3단계

1. 선언단계: 변수를 실행 컨텍스트에 등록한다.
2. 초기화 단계: 실행 컨텍스트에 등록된 변수 객체에 대한 메모리를 할당한다. 이 단계에서 변수는 undifined로 초기화된다.
3. 할당 단계: undefined로 초기화된 변수에 값을 할당한다.

console.log(a); // undefined
var a = 2;

- var 로 선언된 변수는 호이스팅되어 선언과 초기화가 동시에 일어나기 때문에 undefined로 출력된다.

console.log(a); // ReferenceError: a is not defined
let a = 2;

- let, const 키워드로 선언된 변수는 호이스팅되어 선언 단계가 이뤄진다

- 하지만, 초기화 단계는 실제 let이 사용된 코드에 도착했을 때 이뤄지므로 초기화 단계 이전에 변수에 접근하려면 ReferenceError가 발생한다.

- 이렇게 코프에 진입할 때 변수가 만들어지지만 어휘적 바인딩이 실행되기 전까지 액세스할 수 없는 현상을 TDZ(Temporal Dead Zone)이라고 한다.

'Frontend' 카테고리의 다른 글

Webpack  (0) 2020.12.10
JS 프로토타입  (0) 2020.11.07
JS 클로저  (0) 2020.11.07
JS this  (0) 2020.11.07
JS 실행 컨텍스트  (0) 2020.11.07