👩💻 이 포스팅에서는 호이스팅에 대해 정리했습니다.
변수를 선언하고 초기화했을 때, 선언 부분이 최상단으로 끌어올려지는 현상.
✨ 변수 선언 3단계
선언 → 초기화 → 할당
var 변수 선언
, 함수선언문
console.log(name1) // undefined 출력
var name1 = ‘123’
console.log(name2) // ReferenceError 에러 출력
let name2 = ‘123’;
console.log(name3) // ReferenceError 에러 출력
const name3 = ‘123’;
let 변수 선언
은 선언문 이전에 참조하면 참조 에러(ReferenceError)가 발생
한다.일시적 사각지대
(Temporal Dead Zone; TDZ)영역에 속하기 때문TDZ
에 들어가서 별도의 상태로 관리된다.console.log(name1) // undefined 출력
var name1 = ‘123’
// 아래와 같이 실행된다.
var name1 ; //선언 분리되어 상단으로 호출
console.log(name1) //undefined
name1 = '123' // 할당
console.log(name1) // 123 출력
🌱 함수 선언문
myName();
function myName(){
console.log('soyeon');
}
// 정상 작동
// 아래와 같이 실행된다.
function myName(){
console.log('soyeon')
}
myName(); //soyeon 출력
🌱 함수 표현식
myName();
var myName = function(){
console.log('soyeon');
}
// 에러 발생
// 아래와 같이 실행된다.
var myName; //선언과 할당 분리
myName();
myName = function(){
console.log('soyeon')
}
var
let
const
는 모두 호이스팅 된다.let
선언과 동시에 TDZ
에 들어가서 초기화가 필요한 별도의 상태로 관리된다.const
는 선언과 동시에 초기화, 할당까지 이루어진다.var
는 왠만하면 쓰지말자