Programming language/JavaScript

ν˜Έμ΄μŠ€νŒ…(Hoisting)

deo2kim 2020. 10. 24. 20:02
λ°˜μ‘ν˜•

πŸ“”ν˜Έμ΄μŠ€νŒ…μ΄λž€

μ½”λ“œμ— μ„ μ–Έλœ λ³€μˆ˜ 및 ν•¨μˆ˜μ˜ `μ„ μ–Έ`을 μ½”λ“œ μƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ¦¬λŠ” 것을 λ§ν•©λ‹ˆλ‹€. ν•΄λ‹Ήλ³€μˆ˜μ˜ λ²”μœ„μ— 따라 λ‹€λ₯΄κ²Œ μˆ˜ν–‰λ©λ‹ˆλ‹€.

λ³€μˆ˜κ°€ ν•¨μˆ˜ 내에 μžˆλ‹€λ©΄, ν•΄λ‹Ή ν•¨μˆ˜ μ•ˆμ˜ μ΅œμƒλ‹¨μœΌλ‘œ,

λ³€μˆ˜κ°€ ν•¨μˆ˜ 밖에 μžˆλ‹€λ©΄, 슀크립트의 μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ¦½λ‹ˆλ‹€.

 

μ—¬κΈ°μ„œ μ£Όμ˜ν•΄μ•Ό ν•  점은 λ³€μˆ˜μ˜ `μ„ μ–Έ` λΆ€λΆ„λ§Œ λŒμ–΄μ˜¬λ¦°λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

(λ³€μˆ˜λŠ” μ„ μ–Έ - μ΄ˆκΈ°ν™” - ν• λ‹Ή 의 과정을 거쳐 생성)

 

πŸ“” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

varλ₯Ό 쓰지 μ•ŠκΈ°λ‘œ ν•œ μ΄μœ κ°€ μ—¬κΈ°μ„œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

ν•¨μˆ˜λ₯Ό μ„ μ–Έν•΄μ„œ 값을 ν• λ‹Ήν•˜κΈ° 전에 μ½˜μ†”μ„ μ°μ–΄λ΄€λŠ”λ° μ—λŸ¬κ°€ μ•„λ‹Œ undefinedκ°€ λ‚˜μ˜΅λ‹ˆλ‹€. λ°”λ‘œ μ„ μ–Έλ§Œ λλ‹€λŠ” 의미인데 λ™μž‘ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μ„ μ–Έ λΆ€λΆ„λ§Œ 맨 μœ„λ‘œ λŒμ–΄μ˜¬λ €μ§€κ³  값을 ν• λ‹Ήν•˜μ§€ μ•Šμ•˜μœΌλ‹ˆ undefinedκ°€ λ‚˜μ˜΅λ‹ˆλ‹€. λ‹€μŒ 값을 ν• λ‹Ήν•œ ν›„μ—λŠ” 3이 λ‚˜μ˜€κ²Œ λ©λ‹ˆλ‹€.

μ΄λ ‡κ²Œ μ„ μ–ΈλΆ€λΆ„λ§Œ λŒμ–΄μ˜¬λ €μ§€λŠ”κ²ƒμ„ ν˜Έμ΄μŠ€νŒ…μ΄λΌκ³  ν•©λ‹ˆλ‹€.

 

πŸ“” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…κ³Ό ν•¨μˆ˜ λ‚΄λΆ€

λ°–μ—μ„œ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•΄ 놓아도 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λ‹€μ‹œ μ„ μ–Έν•  경우 ν˜Έμ΄μŠ€νŒ…μœΌλ‘œ 인해 λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

λΆ„λͺ…νžˆ 값을 4둜 μ„€μ •ν•΄λ†¨μ§€λ§Œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ ν˜Έμ΄μŠ€νŒ…μ΄ 일어났기 λ•Œλ¬Έμ— 결ꡭ은 λ‹€μ‹œ μ•„λž˜μ™€ 같이 λ™μž‘ν•©λ‹ˆλ‹€.

μœ„μ˜ λͺ¨λ“  일은 var 둜 μ„ μ–Έν–ˆκΈ° λ•Œλ¬Έμ— κ°€λŠ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μš°λ¦¬λŠ” varλ₯Ό 쓰지 μ•ŠκΈ°λ‘œ ν–ˆμœΌλ―€λ‘œ μœ„μ˜ 걱정은 λœμ–΄λ†”λ„ λ©λ‹ˆλ‹€. λ‹€ μžŠμœΌμ„Έμš”!!

πŸ“” ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…

ν•¨μˆ˜μ—λŠ” ν‘œν˜„μ‹μ™€ 선언식이 μžˆμŠ΅λ‹ˆλ‹€. 이 μ€‘μ—μ„œλ„ ν•¨μˆ˜μ˜ μ„ μ–Έμ‹λ§Œ ν˜Έμ΄μŠ€νŒ…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ°˜μ‘ν˜•