호이스팅이란?
호이스팅이란?
호이스팅이란 자바스크립트에서 변수 및 함수선언문이 스코프 내의 최상단으로 끌어올려지는 현상을 말한다.
선언문만 끌어올려지며, 대입문은 끌어올려지지 않는다.
예 - 변수
1
2
console.log(a);
var a = 2;
컴파일러는 var a = 2;
코드를 2개의 구문으로 본다.
var a
a = 2
var a
는 변수 선언문으로 컴파일할 때 처리하고, a = 2
은 실행할 때까지 나눕니다.
var로 선언된 변수 a는 호이스팅되고, 콘솔에는 다음과 같은 결과가 출력됩니다.
1
undefined;
1
2
3
4
// 실제 동작
var a;
console.log(a); // undefined
a = 2;
- var은 선언,초기화가 동시에 이루어지기 때문에 undefined를 출력
- const,let은 선언만 호이스팅 되기 때문에 Reference Error를 출력
예 - 함수선언문
함수 선언은 변수 선언보다 우선적으로 스코프의 최상단으로 끌어올려진다.
1
2
3
4
5
func(); // '함수 호이스팅!'
function func() {
console.log("함수 호이스팅!");
}
위의 코드는 다음과 같이 동작한다.
1
2
3
4
5
6
// 실제 동작
function func() {
console.log("함수 호이스팅!");
}
func();
함수 표현식은 호이스팅이 일어나지 않는다.
예 - 변수, 함수 선언 우선순위
함수 선언은 변수보다 우선으로 호이스팅된다
1
2
3
4
5
6
7
var mymy = "변수 선언";
function mymy() {
console.log("함수 선언");
}
console.log(typeof mymy); // function
호이스팅의 단점
1. 변수 중복 정의
1
2
3
var x = 10;
var x;
console.log(x); // 10
var x
은 중복 선언이지만, 호이스팅으로 인해 무시가 되고 첫번째 선언문이 유지됩니다.
2. 할당 전 변수에 접근
x는 호이스팅이 일어나 선언 전에 호출을 하였지만, 오류가 발생하지 않는다.
1
2
console.log(x); // undefined
var x = 10;
This post is licensed under CC BY 4.0 by the author.