ν˜Έμ΄μŠ€νŒ…

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

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

    JS ν•¨μˆ˜ μ„ μ–Έλ¬Έκ³Ό ν•¨μˆ˜ ν‘œν˜„μ‹ 차이

    ν•¨μˆ˜ μ„ μ–Έλ¬Έκ³Ό ν•¨μˆ˜ ν‘œν˜„μ‹μ΄ 무엇인지 μ•Œμ•„λ΄…μ‹œλ‹€. ν•¨μˆ˜λ₯Ό λ§Œλ“ λ‹€λŠ” λͺ©μ μ€ 동일 ν•˜λ‚˜ λ§Œλ“œλŠ” 방법이 λ‹€λ¦…λ‹ˆλ‹€. // ν•¨μˆ˜ μ„ μ–Έλ¬Έ function add(a, b) { return a+b; } // ν•¨μˆ˜ ν‘œν˜„μ‹ const sum = function(a,b) { return a+b; } ν•¨μˆ˜ 자체λ₯Ό μ„ μ–Έν•˜λ©΄ ν•¨μˆ˜ μ„ μ–Έλ¬Έ, μ„ μ–Έν•œ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— λ‹΄μ•„μ„œ μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜ ν‘œν˜„μ‹μ΄λΌ ν•©λ‹ˆλ‹€. 이 λ‘˜μ€ ν˜Έμ΄μŠ€νŒ… λ°©μ‹μ—μ„œ 차이가 λ‚©λ‹ˆλ‹€. add(1, 3); // ν•¨μˆ˜ 선언보닀 μœ„μ— μžˆμ§€λ§Œ 였λ₯˜κ°€ λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. function add(a, b) { // ν•¨μˆ˜ μ„ μ–Έλ¬Έ return a+b; } console.log(sum(1,2)); // μ—λŸ¬. // ReferenceError Cannot access 'sum' before..