자바스크립트

호이스팅

lby132 2021. 6. 27. 22:33

함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것을 말한다.

자바스크립트 Parser가 함수 실쟁 전 해당 함수를 한번 훑는다.

함수안에 존재한느 변수/함수 선언에 대한 정보를 기억하고 있다가 실행 시킨다.

유효범위 : 함수 블록 {}안에서 유효

 

즉 함수 내에서 아래쪽에 존재하는 내용 중 필요한 값들을 끌어올리는 것이다.

실제로 코드가 끌어 올려지는 건 아니며, 자바스크립트 Parser 내부적으로 끌어올려서 처리하는것이다.

실제 메모리에서는 변화가 없다.

 

var변수 선언과 함수선언문에선만 호이스팅이 일어난다.

var 변수/함수의 선언만 위로 끌어올려지며, 할당은 끌어 올려지지 않는다.

let/const 변수 선언과 함수 표현식에서는 호이스팅이 발생하지 않는다.

 

console.log(aa); // undefinde 가 뜬다.

var aa = "cc";

console.log(aa);

var로 선언시 호이스팅 되어 에러가 나지 않는다.

 

console.log(aa);

let aa = "cc";

console.log(aa);

let으로 선언하면 호이스팅이 되지 않아서 에러남