JS 공부/이론 정리

[JS] 호이스팅이 그래서 도대체 뭔데?

장아장 2023. 7. 17. 00:20

이전에 변수들에 대해서 공부하는데, 호이스팅이라는 개념을 몰라서 따로 공부해야했다. 

 

호이스팅이 뭘까?

우리가 쓴 코드를 생각해보아야 한다. 

 

자바스크립트의 모듈에서 함수를 생성했을 때, 그 함수는 실제로 작성된 부분에서 생성된게 아니다. 

생성단을 모두 위로 올려두고, 그 이후에 아래쪽에서 해당 부분을 만드는 것이다. 

이런 방식의 호이스팅에는 몇가지 문제점이 존재한다. 

 

선언된 변수와 함수가 먼저 선언되었기 때문에, 할당되기 전에 사용될 수 있다는 문제점(?)이 존재한다. 

이게 왜 문제일까?

 

어떻게 보면 이점아닐까? 사용이 원할하잖아!!!

그렇게 생각한 사람 그게 나야~

 

  • 호이스팅은 선언만 끌어올리고 할당은 끌어올리지 않기 때문에 변수에 실제 값을 할당하기 전에는 undefined로 초기화되어 예기치 못하게 오류가 발생하게 할 수 있다

 

이렇게 아무것도 없는 값으로 선언되고 사용되는 코드가 좋은 코드일까?

그런 문제 없이 사용될 수 있는 코드가 좋은 코드 아닐까? 싶다. 

 

앞으로는 var 대신 let, const로, 호이스팅에 대비해야 겠다. 

 

그러면 어떻게 해야 호이스팅되지 않고, 원하는 대로 동작하는 모습을 가질 수 있을까?

  • 변수선언은 항상 스코프(범위)제일 위에, 초기값을 할당해 사용하기
  • 함수 선언문 (function 함수명()) 대신에 함수 표현식을 써보기
  • var 대신 let & const사용하기
  • use strict를 사용하기

 

함수 호이스팅을 이용하는 생각보다는, 아직은 명확하게 사용하면서, 호이스팅이 아닌, 필요할 때에는 get메서드를 사용하는 게 더 낫지 않을까 생각된다. 

아직 개념이 부족해서 이렇게 생각할 수 있다고도 느낀다. 

 

그럼..twenty thousand...🔥