호이스팅이란 ?
console.log(letKeyword)
let letKeyword = 'let is safe'
현재상황 선언되지도않았는데 콘솔로그로 letKeyword를 부르는상황 >> not defined라는 에러경고뜸
console.log(varKeyword)
var varKeyword = 'var is safe'
는 undefined 출력이됨 에러경고가 뜨지않는다.
왜let과 var 에서 이런차이가 나는가?
이유 = 호이스팅 때문 호이스팅은 위로 끌어올려주는 것이다
자바는 코드를 실행하기 전 해석하는 과정을 거친다. 자바스크립트가 해석하는 과정에서 var 변수 선언된 키워드의 경우 선언부 만 위쪽으로 올라가게 된다.
let 키워드의경우 적혀있는 그대로
함수도 경우에 따라 호이스팅이 발생한다. 함수선언식 = 호이스팅이 발생한다. 함수선언식의 경우 var와 마찬가지로 해석하는과정에서 호이스팅 발생 위로 올라가게 된다.
함수표현식 = 호이스팅이 발생하지 않는다.
변수선언할당 =선언단계 : 선언한 변수를 식별자가 담기는 객체에 할당하는 단계식별자 : 변수명이라고 부르는 부분을 이야기함
초기화단계 : 변수에 할당할 메모리 공간을 부여하는 단계
할당단계 : 정의된 변수에 데이터가 할당되는 단계
거쳐 진행된다.
TDZ(Temporal Dead Zone)
선언단계변수에 할당할 메모리가 부여되기 전 단계< TDZ
초기화단계
할당단계
let 과 const 는 왜 호이스팅이 발생하지 않는가?let 과 const(함수표현식) 키워드는 선언단계와 초기화단계가 분리된다. 메모리가 부여되지않은상태이기 때문이다.
반대로var(함수선언식) 는 선언단계와 초기화단계가 분리되지 않는다. 메모리가 부여된 상태이기 때문이다.