스코프란?
식별자가 유효한 범위. 선언된 위치에 의해 결정된다.
var
함수 레벨 스코프를 따른다. 함수의 코드 블록만을 지역 스코프로 인정한다.
let, const
블록 레벨 스코프를 따른다. 모든 코드 블록을 지역 스코프로 인정한다.
var/let
값 재할당 가능
const
상수. 값 재할당 불가능
호이스팅이란?
자바스크립트 고유의 특징.
선언은 런타임 이전 단계인 소스코드 평가 과정에 실행된다. 따라서 선언문이 코드 선두로 올려진 것처럼 동작한다.
var
런타임 이전에 선언 단계와 초기화 단계가 진행되며, 초기화 단계에서 undefined로 변수를 초기화 한다. 따라서 선언문 이전에 변수에 접근해도 참조 에러가 발생하지 않는다.
let/const
런타임 이전에 선언 단계만 진행된다. 따라서 선언문 이전에 변수에 접근하려고 하면 참조 에러가 발생한다.
여기서 변수를 참조할 수 없는 구간(스코프의 시작 지점 ~ 선언문)을 일시적 사각지대라고 한다.