JavaScript/Theory

[JavaScript] ν˜Έμ΄μŠ€νŒ…κ³Ό TDZ

ITs Min 2024. 5. 30.

πŸ” ν˜Έμ΄μŠ€νŒ…

ν˜Έμ΄μŠ€νŒ…(hoisting)은 JavaScriptμ—μ„œ λ³€μˆ˜ 및 ν•¨μˆ˜ 선언이 μŠ€μ½”ν”„μ˜ μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ €μ§€λŠ” 것을 μ˜λ―Έν•œλ‹€. μ΄λŠ” μ½”λ“œμ—μ„œ λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° 이전에도 ν•΄λ‹Ή λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ€ λ³€μˆ˜κ°€ μ„ μ–Έλ˜κΈ° 전에 λ³€μˆ˜κ°€ 이미 μ‘΄μž¬ν•˜λŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” ν˜„μƒμ„ μ„€λͺ…ν•œλ‹€. 즉, λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° 전에 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ ν˜Έμ΄μŠ€νŒ…μ€ λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” λΆ€λΆ„κΉŒμ§€ λŒμ–΄μ˜¬λ €μ§€μ§€ μ•Šκ³  λ³€μˆ˜μ˜ ν• λ‹Ή(μ΄ˆκΈ°ν™”)은 κ·Έ μœ„μΉ˜μ— κ·ΈλŒ€λ‘œ λ‚¨λŠ”λ‹€.

 

ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ€ ν•¨μˆ˜ 선언이 μŠ€μ½”ν”„μ˜ μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ €μ§€λŠ” 것을 μ˜λ―Έν•œλ‹€. 즉 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° 전에도 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€.

console.log(number)
var number = 10
console.log(number)

 

μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  경우 ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄

undefined

10

μ΄λ ‡κ²Œ 좜λ ₯이 λœλ‹€. 

ν•˜μ§€λ§Œ var와 λ‹€λ₯΄κ²Œ letμ΄λ‚˜ const둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” undefined둜 μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ”λ‹€.


πŸ” TDZ

TDZ(Temporal Dead Zone)λŠ” JavaScriptμ—μ„œ let 및 const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ˜ λ…νŠΉν•œ λ™μž‘μ„ μ„€λͺ…ν•˜λŠ” μš©μ–΄μ΄λ‹€.

TDZλŠ” λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆμ§€λ§Œ 아직 μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€. 즉, λ³€μˆ˜κ°€ μ„ μ–Έλœ 이후 μ΄ˆκΈ°ν™”λ˜κΈ° μ „κΉŒμ§€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

console.log(name) // ReferenceError: Cannot access 'name' before initialization
let name = 'MINI'

 

μœ„μ˜ μ½”λ“œμ—μ„œλŠ” name을 μ‚¬μš©ν•˜κΈ° 전에 μ„ μ–Έλ˜μ—ˆμ§€λ§Œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— ReferenceErrorκ°€ λ°œμƒν•œλ‹€. μ΄λŠ” TDZ에 μ˜ν•œ 것이닀. λ³€μˆ˜κ°€ μ„ μ–Έλ˜μžλ§ˆμž TDZ에 μ§„μž…ν•˜λ©°, μ΄ˆκΈ°ν™”λ˜κΈ° μ „κΉŒμ§€λŠ” TDZμ—μ„œ λ²—μ–΄λ‚˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

TDZλŠ” letκ³Ό const둜 μ„ μ–Έλœ λ³€μˆ˜μ—μ„œλ§Œ λ°œμƒν•œλ‹€. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ μ„ μ–Έ 및 μ΄ˆκΈ°ν™”κ°€ λ™μ‹œμ— 이루어지며, undefined둜 μ΄ˆκΈ°ν™”λ˜λ―€λ‘œ TDZκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. 이렇듯 TDZλŠ” μ½”λ“œμ˜ μ•ˆμ „μ„±μ„ 높이고 μ‹€μˆ˜λ₯Ό μ€„μ΄λŠ” 데 도움이 λœλ‹€.


 

'JavaScript > Theory' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JavaScript] 콜백 ν•¨μˆ˜(Callback Function)  (0) 2024.05.24
[JavaScript] JSON 기초  (0) 2024.01.16
[JavaScript] JavaScript, jQuery, AJAX  (0) 2024.01.15

λŒ“κΈ€

TOP

λŠ¦μ—ˆλ‹€κ³  생각할 땐 λ„ˆλ¬΄ λŠ¦μ€ κ±°λ‹€.