JavaScript Hoisting
JavaScript Hoisting
web 개발을 하면서 여러 레퍼런스들을 확인하고 공부하게 되는데, 문득 똑같아 보이나 왜 이건 되고? 왜 이건 안되지?하는 부분이 있었습니다.
그 차이는 Hoisting에 대한 내용이었는데요. 알아두면 쓸모있기에 정리해봅시다.
호이스팅(Hoisting)이란?
호이스팅을 한 줄로 설명하자면, 선언문을 유효 범위의 최상단으로 끌어올리는 행위라고 할 수 있습니다.
최상단이라는 표현이 중요한데요. 인터프리터 언어인 자바스크립트가 한 줄씩 순서대로 코딩을 실행하는 것이 아니라, 임의로 특정 내용을 최상단으로 끌어 올려서 우선 실행하는 것을 호이스팅이라고 합니다.
호이스팅의 특징
-
자바스크립트 Parser가 함수 실행 전 해당 함수를 한 번 훑는다.
-
함수 안에 존재하는 변수/함수선언에 대한 정보를 기억하고 있다가 실행시킨다.
-
유효 범위: 함수 블록 {} 안에서 유효
-
실제 메모리에는 변화가 없다.
호이스팅의 대상
var 변수 선언과 함수선언식(Function Declarations)에서만 호이스팅이 일어납니다.
첨언으로 [ var 변수 / 함수 ]의 선언만 호이스팅이 동작하고, 할당(초기화)은 호이스팅이 동작하지 않습니다.
🙋♂️ var 변수 vs let 변수 비교
|
|
만약 변수를 선언한 뒤 나중에 초기화시켜 사용한다면, 그 값은 undefined로 지정됩니다. 아래 예제로 동작 순서를 알아 봅시다.
|
|
* [ let / const ] 변수 선언과 함수표현식(Function Expressions)에서는 호이스팅이 발생하지 않습니다.
🙋♂️ 함수선언식(Function Declarations) vs 함수표현식(Function Expressions)
|
|
함수선언식은 일반적인 프로그래밍 언어에서 함수 선언과 비슷한 모습니다. 다만, 함수표현식은 유연한 자바스크립트 언어의 특징을 활용한 선언 방식이라고 할 수 있습니다.