πŸ”€ λ³€μˆ˜(var)

κΉ€μ² μ€€Β·2022λ…„ 4μ›” 2일
0

Javascript

λͺ©λ‘ 보기
10/16

기술 면접을 μ€€λΉ„ν•˜λ‹€ λ³€μˆ˜μ— λŒ€ν•΄ λ‹€μ‹œ ν•œλ²ˆ λ˜μ§šμ–΄λ³΄κΈ° μœ„ν•΄ 이전에 λ³΄μ•˜λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ”₯λ‹€μ΄λΈŒλ₯Ό 보며 λ³€μˆ˜μ— λŒ€ν•œ κ°œλ…μ„ μ •λ¦¬ν•΄λ³΄κ³ μž ν•œλ‹€.

λ³€μˆ˜

λ³€μˆ˜λŠ” μž„μ˜μ˜ 값을 μ €μž₯ν•˜κΈ° μœ„ν•΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜μ—¬ μ‹λ³„ν•˜κ³  μ°Έμ‘°ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.
(λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•˜λŠ” 것은 μœ„ν—˜ν•˜κΈ° λ•Œλ¬Έ!)

λ³€μˆ˜ μ„ μ–Έ

λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Όν•œλ‹€.

λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ”λ° μ‚¬μš©ν•˜λŠ”λ° ν‚€μ›Œλ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • var
  • let
  • const

(var,let,const의 μ°¨μ΄λŠ” 이전에 기술 면접을 μœ„ν•œ ν¬μŠ€νŒ…μ„ λ‚¨κ²¨λ’€μœΌλ‹ˆ λ„˜μ–΄κ°€μž.)

λ³€μˆ˜λ₯Ό μ„ μ–Έν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό λ©”λͺ¨λ¦¬ 곡간에 μ—°κ²°ν•  수 μžˆλ‹€.

var keyword
var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™” 단계도 같이 μ§„ν–‰λœλ‹€.

console.log(x) // undefined
var x

μ—¬κΈ°μ„œ μ΄ˆκΈ°ν™” λ‹¨κ³„λž€ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜λŠ” 것을 λ§ν•œλ‹€.
μ΄λ•Œ ν• λ‹Ήν•˜λŠ” 값은 undefined이닀.

이 λ•Œ μ΄ˆκΈ°ν™” 단계가 ν•„μš”ν•œ μ΄μœ λŠ” 이전에 μ‚¬μš©ν•˜λ˜ κ°’μ˜ μ‚¬μš©μ„ ν”Όν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.

λ§Œμ•½ μ΄ˆκΈ°ν™” 단계λ₯Ό κ±°μΉ˜μ§€ μ•ŠμœΌλ©΄ 이전 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©ν•˜μ˜€λ˜ λ³€μˆ˜κ°’μ΄ λ‚¨μ•„μžˆμ–΄ μƒˆλ‘­κ²Œ μƒμ„±ν•˜λŠ” λ³€μˆ˜κ°’μ— 영ν–₯을 쀄 수 μžˆλ‹€.

λ•Œλ¬Έμ— μ΄ˆκΈ°ν™” 단계λ₯Ό 거침으둜써 μ΄λŸ¬ν•œ μœ„ν—˜μœΌλ‘œλΆ€ν„° μ•ˆμ „ν•  수 μžˆλ‹€.

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

λͺ¨λ“  μ‹λ³„μž 선언문은 ν˜Έμ΄μŠ€νŒ…μ΄ κ°€λŠ₯ν•˜λ‹€.

ν˜Έμ΄μŠ€νŒ…μ„ μ„€λͺ…ν•˜κΈ°μ— μ•žμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 μ‹€ν–‰ 단계과 λ³€μˆ˜ μ„ μ–Έ μ‹œμ μ„ μ•Œμ•„μ•Όν•œλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—”μ§„μ€ μ†ŒμŠ€ μ½”λ“œμ— κ΄€ν•˜μ—¬ 1.μ†ŒμŠ€ μ½”λ“œ 평가 과정을 λ¨Όμ € μ§„ν–‰ν•œλ’€ 2.λŸ°νƒ€μž„μ΄ μ‹€ν–‰λœλ‹€.

μ†ŒμŠ€ μ½”λ“œ 평가 κ³Όμ •
μ„ μ–Έλ¬ΈμœΌλ‘œ μ„ μ–Έλœ μ‹λ³„μžλ₯Ό λ¨Όμ € ν‰κ°€ν•˜λŠ” κ³Όμ •

λŸ°νƒ€μž„
μ†ŒμŠ€μ½”λ“œκ°€ 순차적으둜 μ§„ν–‰λ˜λŠ” μ‹œμ 

이 μ†ŒμŠ€ μ½”λ“œ 평가 κ³Όμ •μ—μ„œλŠ” μ‹λ³„μž μ„ μ–Έ μ½”λ“œκ°€ λ¨Όμ € μ‹€ν–‰λœλ‹€.

console.log(x) // undefined



var x

λ•Œλ¬Έμ— λŸ°νƒ€μž„μ΄ 싀행될 λ•Œ λ¨Όμ € μ°Έμ‘°ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 것이며 이λ₯Ό ν˜Έμ΄μŠ€νŒ…μ΄λΌκ³  ν•œλ‹€.

ν˜Έμ΄μŠ€νŒ…(hoisting)
호이슀트(hoist)의 λœ»μ€ 'λŒμ–΄μ˜¬λ¦¬λ‹€'λΌλŠ” λœ»μ΄λ‹€.
즉, ν•΄λ‹Ή μ‹λ³„μžκ°€ μ½”λ“œμ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ§•μ„ ν˜Έμ΄μŠ€νŒ…μ΄λΌκ³  ν•œλ‹€.

κ°’μ˜ ν• λ‹Ή

λ³€μˆ˜μ— 값을 ν• λ‹Ήν•  λ•ŒλŠ” ν• λ‹Ή μ—°μ‚°μž =λ₯Ό μ‚¬μš©ν•œλ‹€.

var x // μ„ μ–Έ
x= 80 // ν• λ‹Ή
var x = 80

λ³€μˆ˜μ˜ μ„ μ–Έ μ‹œμ κ³Ό ν• λ‹Ή μ‹œμ μ€ λ‹€λ₯΄λ‹€.

λ³€μˆ˜μ˜ 선언은 λŸ°νƒ€μž„(μ†ŒμŠ€μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ )이전에 μ‹€ν–‰λ˜μ§€λ§Œ λ³€μˆ˜μ˜ 할당은 λŸ°νƒ€μž„μ‹œμ μ— μ‹€ν–‰λœλ‹€.

λ•Œλ¬Έμ— ν• λ‹Ήν•˜λŠ” 값은 ν˜Έμ΄μŠ€νŒ…μ΄ λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 κΈ°μ–΅ν•΄λ‘μ–΄μ•Όν•œλ‹€.

κ°’μ˜ μž¬ν• λ‹Ή

var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•˜λ‹€.

var x = 80
x = 90

기쑴에 값이 μ €μž₯λ˜μ–΄μžˆλ˜ λ©”λͺ¨λ¦¬ 곡간을 가비지 μ½œλ ‰ν„°(garbage collector)에 μ˜ν•΄ λ©”λͺ¨λ¦¬μ—μ„œ μžλ™ ν•΄μ œλœλ‹€.

Note
const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ήμ΄ λΆˆκ°€ν•˜λ‹€.

garbage collector(가비지 μ½œλ ‰ν„°)
가비지 μ½œλž™ν„°λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν• λ‹Ήν•œ λ©”λͺ¨λ¦¬ 곡간을 주기적으둜 κ²€μ‚¬ν•˜μ—¬ 더이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜λŠ” κΈ°λŠ₯이닀.

더이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λž€ μ–΄λ–€ μ‹λ³„μžλ„ μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬ 곡간을 μ˜λ―Έν•œλ‹€.

0개의 λŒ“κΈ€