Hoisting은 자바스크립트에서 변수 및 함수 선언이 해당 스코프의 맨 위로 끌어올려지는 것을 말합니다. 이것은 선언된 변수나 함수가 아직 스코프 안에서 할당되거나 정의되기 전에도 사용될 수 있다는 것을 의미합니다.
예를 들어, 다음과 같은 코드가 있다고 가정해 봅시다.
console.log(x);
var x = 10;
var x;
console.log(x);
x = 10;
이러한 동작은 함수 선언에도 적용됩니다. 함수 선언은 변수 선언과 동일하게 스코프의 맨 위로 끌어올려지며, 함수를 선언하기 전에도 호출할 수 있습니다.
하지만 let이나 const와 같은 선언 방식에서는 hoisting이 발생하지 않습니다. 이는 선언과 초기화가 동시에 이루어지지 않고 블록 스코프에서 발생하기 때문입니다. 이러한 변수들은 블록 안에서 선언된 후에만 사용할 수 있으며, 블록을 벗어나면 스코프 밖으로 벗어나게 됩니다.