front-end/JavaScript

JavaScript (6) - ν˜Έμ΄μŠ€νŒ…(Hoisting), λ³€μˆ˜ μ„ μ–Έμ˜ μ‹€ν–‰ μ‹œμ 

verysoyoung 2023. 12. 4. 12:37
728x90

πŸ‘‰ ν˜Έμ΄μŠ€νŒ… (Hoisting): λŒμ–΄ μ˜¬λ¦¬λ‹€. κ²Œμ–‘ν•˜λ‹€.

ν˜Έμ΄μŠ€νŒ…μ€ λŒμ–΄ μ˜¬λ¦°λ‹€λŠ” λœ»μ„ κ°–κ³  μžˆλ‹€.
JavaScript μ—μ„œ ν˜Έμ΄μŠ€νŒ…μ„ λ¬΄μ—‡μ„ μ˜λ―Έν• κΉŒ?

 

μš°μ„  μ•„λž˜ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μž.

console.log(score); // λ³€μˆ˜ μ°Έμ‘°
var score; // λ³€μˆ˜ μ„ μ–Έλ¬Έ

 

λ³€μˆ˜ μ„ μ–Έλ¬Έ 보닀 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” μ½”λ“œκ°€ μ•žμ— μžˆλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 인터프리터에 μ˜ν•΄ ν•œ 쀄씩 순차적으둜 μ‹€ν–‰λ˜λ―€λ‘œ console.log κ°€ κ°€μž₯ λ¨Όμ € 싀행될 것이닀.
μ°Έμ‘°μ—λŸ¬ ReferenceError κ°€ λ°œμƒν•  κ²ƒμœΌλ‘œ μ˜ˆμƒν–ˆμ§€λ§Œ, 

 

undefinedκ°€ 좜λ ₯λœλ‹€.

κ·Έ μ΄μœ λŠ” λ³€μˆ˜ 선언이 μ†ŒμŠ€μ½”λ“œκ°€ ν•œ 쀄씩 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ  λŸ°νƒ€μž„ runtime이 μ•„λ‹ˆλΌ κ·Έ μ΄μ „ λ‹¨κ³„μ—μ„œ λ¨Όμ € μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.
λ³€μˆ˜ 선언은 μ†ŒμŠ€μ½”λ“œμ˜ 어디에 μžˆλ“  상관없이 λ‹€λ₯Έ μ½”λ“œλ³΄λ‹€ κ°€μž₯ λ¨Όμ € μ‹€ν–‰λœλ‹€.

 

λ³€μˆ˜ 선언문이 μ½”λ“œμ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 고유의 νŠΉμ§•μ„ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(variable hoisting)이라 ν•œλ‹€.
μ‹€μ œλ‘œ λŒμ–΄μ˜¬λ €μ§„ 것이 μ•„λ‹ˆλΌ λ³€μˆ˜ 선언을 κ°€μž₯ λ¨Όμ € μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 마치 λŒμ—¬μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ 보인닀.

 

 

좜처: 이웅λͺ¨, λͺ¨λ˜μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive, μœ„ν‚€λΆμŠ€(2020), p42-43.

728x90