λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

JavaScript

[ JavaScript ] var, let, const νŒŒν—€μΉ˜κΈ°.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œλŠ” var, let, const μ΄λ ‡κ²Œ 총 3가지가 μ‘΄μž¬ν•œλ‹€.

 

 

 

 

 

1. var 

 

var ν‚€μ›Œλ“œλŠ” ES6 이전( let, constκ°€ λ‚˜μ˜€κΈ° 이전 )에 λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•˜λ˜ ν‚€μ›Œλ“œμ˜€λ‹€.

var ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ λŸ°νƒ€μž„ 이전에 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ "μ„ μ–Έ"단계와 "μ΄ˆκΈ°ν™”"단계λ₯Ό 거치게 λœλ‹€. μ„ μ–Έ λ‹¨κ³„μ—μ„œλŠ” μŠ€μ½”ν”„μ— λ³€μˆ˜ μ‹λ³„μžλ₯Ό 등둝해 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 λ³€μˆ˜μ˜ 쑴재λ₯Ό μ•Œλ¦¬κ³  κ·Έ μ¦‰μ‹œ μ΄ˆκΈ°ν™” λ‹¨κ³„μ—μ„œ undefined둜 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•œλ‹€.

 

var ν‚€μ›Œλ“œλŠ” λ³€μˆ˜ 블둝을 κ³ λ €ν•˜μ§€ μ•Šκ³ , ν˜„μž¬ ν•¨μˆ˜(var ν‚€μ›Œλ“œλ₯Ό μ„ μ–Έν•œ ν•¨μˆ˜)λ˜λŠ” μ „μ—­ μŠ€μ½”ν”„ μ–΄λ””μ—μ„œλ‚˜ μ ‘κ·Όν•  수 μžˆλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€.

 

// λ³€μˆ˜ a에 λŒ€ν•΄ μ„ μ–Έ.
var a;

 

μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”κ°€ λ™μ‹œμ— μ§„ν–‰λ˜μ–΄ μ°Έμ‘° μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  undefinedκ°€ λ°˜ν™˜λœλ‹€.

 

μ΄λ ‡κ²Œ 되면 λ³€μˆ˜ μ„ μ–Έλ¬Έ 이전에 λ³€μˆ˜μ— 접근해도 μŠ€μ½”ν”„μ— λ³€μˆ˜κ°€ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€. 이후에 λ³€μˆ˜ 할당문을 톡해 값이 ν• λ‹Ήλœλ‹€.

 

 

// λ³€μˆ˜ a에 1을 ν• λ‹Ή.
a = 1;

// var ν‚€μ›Œλ“œλŠ” μž¬μ„ μ–Έλ„ κ°€λŠ₯ν•˜λ‹€.
var a = 'ν•˜λ‚˜';

 

var ν‚€μ›Œλ“œλŠ” μž¬ν• λ‹ΉλΏλ§Œ μ•„λ‹ˆλΌ, μœ„μ™€κ°™μ΄ μž¬μ„ μ–Έλ„ κ°€λŠ₯ν•˜λ‹€.

 

 

 

 

 

πŸ‘‰ var ν‚€μ›Œλ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ„ μ–Έκ³Ό λ™μ‹œμ— μ•”λ¬΅μ μœΌλ‘œ undefined둜 μ΄ˆκΈ°ν™” 되며, λ³€μˆ˜μ˜ μž¬μ„ μ–Έ 및 μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•˜λ‹€.

 

 

 

 

 

 

2. let

 

let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” "μ„ μ–Έ"단계와 "μ΄ˆκΈ°ν™”" 단계가 λ‚˜λˆ„μ–΄μ Έμ„œ μ§„ν–‰λœλ‹€.

λŸ°νƒ€μž„ 이전에 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ μ„ μ–Έ 단계가 λ¨Όμ € μ‹€ν–‰λ˜μ§€λ§Œ μ΄ˆκΈ°ν™” λ‹¨κ³„λŠ” λ³€μˆ˜ 선언문에 λ„λ‹¬ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—, μ΄ˆκΈ°ν™” 단계 이전에 λ³€μˆ˜μ— μ ‘κ·Όν•˜λ €κ³  ν•˜λ©΄ var ν‚€μ›Œλ“œ 같이 undefined κ°€ λ°˜ν™˜λ˜λŠ” 것이 μ•„λ‹ˆλΌ μ°Έμ‘° μ—λŸ¬(Refference Error)κ°€ λ°œμƒν•œλ‹€.

 

μ΄ˆκΈ°ν™” 단계 이전에 λ³€μˆ˜μ— 접근을 μ‹œλ„ν•˜μ—¬ μ°Έμ‘° μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” var ν‚€μ›Œλ“œμ™€λŠ” λ‹€λ₯΄κ²Œ 블둝 레벨 μŠ€μ½”ν”„λ₯Ό 가진닀. 

 

 

 

 

 

 

 

3. const

 

const ν‚€μ›Œλ“œλŠ” 'μƒμˆ˜(constant)' 선언을 μœ„ν•΄ 주둜 μ‚¬μš©ν•œλ‹€. const ν‚€μ›Œλ“œλŠ” let ν‚€μ›Œλ“œμ™€ λΉ„μŠ·ν•˜μ§€λ§Œ λ‹€λ₯Έ 점듀이 λͺ‡κ°€ μ§€μžˆλ‹€. μš°μ„  const ν‚€μ›Œλ“œλŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ•Όν•˜κ³ , 그렇지 μ•ŠμœΌλ©΄ μ•„λž˜μ™€ 같은 문법 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

 

 

const ν‚€μ›Œλ“œλŠ” let ν‚€μ›Œλ“œμ²˜λŸΌ 블둝 레벨 μŠ€μ½”ν”„λ₯Ό κ°€μ§€μ§€λ§Œ let ν‚€μ›Œλ“œμ™€λŠ” λ‹€λ₯΄κ²Œ λ³€μˆ˜μ˜ μž¬μ„ μ–ΈλΏλ§Œ μ•„λ‹ˆλΌ, μž¬ν• λ‹Ή λ˜ν•œ λΆˆκ°€λŠ₯ ν•˜λ‹€.

 

ν•˜μ§€λ§Œ μž¬ν• λ‹Ή 없이 값을 λ³€κ²½ν•  수 μžˆλŠ” 객체의 νŠΉμ„±μƒ const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ— 객체 값이 ν• λ‹Ή 된 κ²½μš°μ—λŠ” 값을 λ³€κ²½ν•  수 μžˆλ‹€.

 

 

 

 

 

 

 

 

 

 

참고자료 )

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ DEEP DIVE - 이웅λͺ¨ / μœ„ν‚€λΆμŠ€

var - MDN

let - MDN

const - MDN