TDZ

    JS ν˜Έμ΄μŠ€νŒ…κ³Ό TDZ

    ν˜Έμ΄μŠ€νŒ… hoisting μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μ „ μ½”λ“œ 전체λ₯Ό μŠ€μΊ”ν•˜λ©΄μ„œ ν˜•μƒν™” 및 κ΅¬λΆ„ν•˜λŠ” 과정을 κ±°μΉ˜λŠ”λ° 이 κ³Όμ •μ—μ„œ λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“± λͺ¨λ“  선언을 μœ„λ‘œ λŒμ–΄ μ˜¬λ¦½λ‹ˆλ‹€. 인터프리터가 λ³€μˆ˜μ™€ ν•¨μˆ˜μ˜ λ©”λͺ¨λ¦¬ 곡간을 μ„ μ–Έ 전에 미리 ν• λ‹Ήν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. var 의 경우 ν˜Έμ΄μŠ€νŒ… μ‹œ undefined 둜 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν•˜μ§€λ§Œ, let κ³Ό const λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™” λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ•Œλ¬Έμ— μ•„λž˜μ™€ 같은 μ½”λ“œ(1) κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ„ μ–ΈλΆ€λ§Œ λŒμ–΄μ˜¬λ € 놓은 것이기에, (2) μ½”λ“œμ²˜λŸΌ ν• λ‹Ήλœ 값을 κ°€μ Έ μ˜€λŠ” 것은 λΆˆκ°€λŠ₯ ν•©λ‹ˆλ‹€. add(1, 3); // (1) ν•¨μˆ˜ 선언보닀 μœ„μ— μžˆμ§€λ§Œ 였λ₯˜ λ‚˜μ§€ μ•Šκ³  μ‹€ν–‰λ©λ‹ˆλ‹€. console.log(a); // (2) μ—λŸ¬. ν• λ‹Ήλ˜μ§€ μ•Šμ€ 것을 좜λ ₯..