Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions JS/hoisting.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 호이스팅(Hoisting)

- 결론
- 함수안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것
- 설명
- 자바스크립트 함수는 실행되기 전에 함수 안에 필요한 변수값들을 모아서 유효범위 최상단에 선언함
- 자바스크립트 Parser가 함수 실행 전 해당 함수를 한 번 훑음
- 함수 안에 존재하는 변수/함수선언에 대한 정보를 기억하고 있다가 실행시킴
- 유효범위 : 함수 블록 안에서 유효
- 실제로 코드가 끌어올리지는 것은 아님
- var, let, const 변수/함수 선언과 함수 선언문에서 호이스팅이 일어난다
- var, let, const 변수/함수의 선언만 위로 끌어 올려지며 할당은 끌어올려지지 않음
- let 선언과 동시에 TDZ에 들어가서 초기화가 필요한 별도의 상태로 관리
- const는 선언과 동시에 초기화, 할당까지 이뤄져야함
- let, const, 함수표현문은 호이스팅이 일어나지 않는 것처럼 동작
- 우선순위
- 변수선언이 함수선언보다 더 위로 끌어올려짐
- 값이 할당되어 있지 않은 변수의 경우, 함수선언문이 변수를 덮어씀
- 값이 할당되어 있는 변수의 경우, 변수가 함수선언문을 덮어씀
- 주의사항
- 코드의 가독성과 유지보수를 위해 호이스팅이 일어나지 않도록 함
- 확장개념
- 변수생성단계
- 선언 : 스코프와 변수 객체가 생성되고, 스코프가 변수 객체를 참조
- 초기화 : 변수 객체 값을 위한 공간을 메모리에 할당하며 할당되는 값은 undefined임
- 할당 : 변수 객체에 값을 할당
- TDZ(Temporal Dead Zone)
- 선언은 되어있지만 초기화가 되지 않아 이를 위한 자리가 메모리에 준비되어 있지 않은 상태
- var : 선언과 동시에 초기화, 즉 선언과 동시에 undefined 할당
- let, const는 선언만 될 뿐 초기화는 변수 선언문에 도달했을 때 이루어지므로 초기화 이전에 변수에 접근하면 참조에러(Reference Error) 발생
- 요약
- 함수안에 있는 var 선언과 함수선언문을 함수 유효범위의 최상단으로 끌어올리는 것
- 참조
- [https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html](https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html)
- [https://yceffort.kr/2020/05/var-let-const-hoisting](https://yceffort.kr/2020/05/var-let-const-hoisting)