var, let, const의 차이점과 호이스팅에 대한 내용
hoisting
이란 코드가 실행되기 전 '변수/함수의 선언'이 해당 스코프에서 가장 최상위로 끌어 올려지는 현상이다.(끌어 올리는 행위 자체를 말하는 것이 아니다.)
자바스크립트 엔진은 코드를 실행하기 전 코드의 형상화, 구분 과정을 거친다.(코드가 실행되기 위해 필요한 환경)
위에서 말한 '실행 컨텍스트를 위한 과정'에서 모든 '선언'을 메모리에 저장한다.
실행 전 메모리에 이미 저장하기 때문에, '선언'이 파일의 맨 위로 끌어올려진 것처럼 보이게 한다.
// example(var)
var a = 1을 풀어서 작성해보면,
----------------------------
var a = undefined
a = 1
// example(let)
let a = 1
----------------------------
let a (초기화 되지 않아 사용할 수 없다.)
// example(const)
const a = 1
----------------------------
const a (선언과 할당이 동시에 이루어지지 않아 문법 에러)
var
는 선언 시 초기화 단계(undefined 할당)가 동시에 진행된다. 호이스팅으로 인해 선언 전에 사용하고, 나중에 선언해도 에러가 나지 않는다.
var
는 재선언과 재할당이 모두 가능하다.
let
재할당이 가능하다.
const
는 재선언, 재할당 둘 다 불가능하다.
호이스팅은 키워드에 관계 없이 발생한다. 하지만 var
만 에러가 나지 않는다.
let
와 const
는 선언 시에 자동으로 초기화가 진행되지 않아 메모리 할당이 안되어 에러가 뜬다.const
는 선언과 할당을 동시에 진행해야 한다.// example
var a = 1
var a = 2 (재선언 가능)
a = 3 (재할당 가능)
-----------------------------
let a = 1
let a = 2 (재선언 불가능)
a = 3 (재할당 가능)
-----------------------------
const a = 1
const a = 2 (재선언 불가능)
a = 3 (재할당 불가능)