Programming

[JS] 호이스팅(Hoisting)

jay-dev 2023. 6. 26. 18:56

호이스팅이란

변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미,
변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는 것.

쉽게 말하면 선언되지 않은 변수나 함수를 끌어올려서 사용해버리는 것.

catName("클로이");

function catName(name) {
  console.log("제 고양이의 이름은 " + name + "입니다");
}

/*
결과: "제 고양이의 이름은 클로이입니다"
*/

(이 경우 호이스팅이 발생했다고 한다)

위 코드는 에러가 나와야 정상이지만
Javascript에서는 동작한다.

Javascript는 느슨한 제약을 가진 언어이다.

호이스팅이 발생한 코드는
가독성이 떨어지고
유지보수를 어렵게한다.

특히 var을 사용하면 호이스팅이 일어날 확률이 높다.

var -> 재선언 가능, 재할당 가능
let -> 재선언 불가능, 재할당 가능
const -> 재선언 불가능, 재할당 불가능

ES6와 함께 등장한 let, const 사용을 지향하고
var 사용은 지양해야 한다.