all is well!!

18. let, const ν‚€μ›Œλ“œμ™€ 블둝 레벨 μŠ€μ½”ν”„ λ³Έλ¬Έ

Javascript 곡뢀

18. let, const ν‚€μ›Œλ“œμ™€ 블둝 레벨 μŠ€μ½”ν”„

tnqlscho 95 2023. 7. 29. 10:34

πŸ‘€  var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ˜ 문제점

ES6 μ΄μ „κΉŒμ§€λŠ” λ³€μˆ˜ 선언은 var ν‚€μ›Œλ“œλ§Œ μ‚¬μš©ν–ˆλ‹€.

 

🟣 λ³€μˆ˜ 쀑볡 μ„ μ–Έ ν—ˆμš©

1. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό 쀑볡 μ„ μ–Έν•˜λ©΄ μ΄ˆκΈ°ν™”λ¬Έ μœ λ¬΄μ— 따라 λ‹€λ₯΄κ²Œ λ™μž‘.

2. μ΄ˆκΈ°ν™”λ¬Έμ΄ μžˆλŠ” λ³€μˆ˜ 선언문은 JS엔진에 μ˜ν•΄ var ν‚€μ›Œλ“œκ°€ μ—†λŠ”κ²ƒμ²˜λŸΌ λ™μž‘.

3. μ΄ˆκΈ°ν™”λ¬Έμ΄ μ—†λŠ” λ³€μˆ˜ 선언문은 μ—λŸ¬λŠ” λ°œμƒν•˜μ§€ μ•Šμ§€λ§Œ λ¬΄μ‹œλœλ‹€.

4. λ³€μˆ˜λ₯Ό 쀑볡 μ„ μ–Έν•˜λ©΄μ„œ κ°’κΉŒμ§€ ν• λ‹Ήν•˜λ©΄ μ˜λ„μΉ˜ μ•Šκ²Œ λ¨Όμ € μ„ μ–Έλœ λ³€μˆ˜ 값이 λ³€κ²½λ˜λŠ” λΆ€μž‘μš©μ΄ μžˆλ‹€.

 

🟣 ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„

1. var ν‚€μ›Œλ“œμ˜ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œ μ§€μ—­ μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€.

2. ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œ 선언해도 λͺ¨λ‘ μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€.

var x = 1;

if(true){
   var x = 10;
}

console.log(x); // 10

3. for문의 λ³€μˆ˜ μ„ μ–Έλ¬Έμ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λ„ μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€.

4. ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λŠ” μ „μ—­ λ³€μˆ˜λ₯Ό λ‚¨λ°œν•  κ°€λŠ₯성이 크닀.

 

🟣 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

1. var ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ λ³€μˆ˜ 선언문이 μŠ€μ½”ν”„μ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘.

2. ν”„λ‘œκ·Έλž¨μ˜ 흐름상 λ§žμ§€ μ•Šκ³  가독성도 λ–¨μ–΄λœ¨λ¦¬κ³  였λ₯˜κ°€ λ‚  κ°€λŠ₯성이 μžˆλ‹€.

 

πŸ‘€  let ν‚€μ›Œλ“œ

ES6μ—μ„œλŠ” var의 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ letκ³Ό constλ₯Ό λ„μž…ν–ˆλ‹€.

 

🟣 λ³€μˆ˜ 쀑볡 μ„ μ–Έ κΈˆμ§€

μž¬ν• λ‹Ήλ§Œ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— let ν‚€μ›Œλ“œλ‘œ 이름이 같은 λ³€μˆ˜λ₯Ό 쀑볡 μ„ μ–Έν•˜λ©΄ 문법 μ—λŸ¬κ°€ λ‚œλ‹€.

 

🟣 λΈ”둝 레벨 μŠ€μ½”ν”„

1. λͺ¨λ“  μ½”λ“œλΈ”λ‘μ„ μ§€μ—­ μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€.

2. ν•¨μˆ˜λ„ μ½”λ“œ λΈ”λ‘μ΄μ—¬μ„œ μŠ€μ½”ν”„λ₯Ό λ§Œλ“ λ‹€. ν•¨μˆ˜ λ‚΄μ˜ μ½”λ“œ 블둝은 ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„μ— μ€‘μ²©λœλ‹€.

🟣 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

1. λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ”κ²ƒμ²˜λŸΌ λ™μž‘.

2. κ·Έλž˜μ„œ let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό λ³€μˆ˜ μ„ μ–Έλ¬Έ 이전에 μ°Έμ‘°ν•˜λ©΄ μ°Έμ‘° μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

3. 선언단계와 μ΄ˆκΈ°ν™” 단계가 λΆ„λ¦¬λ˜μ–΄ μ§„ν–‰ν•œλ‹€.

4. λŸ°νƒ€μž„ 이전에 JS엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ μ„ μ–Έ 단계가 λ¨Όμ € μ‹€ν–‰λ˜μ§€λ§Œ μ΄ˆκΈ°ν™” λ‹¨κ³„λŠ”

λ³€μˆ˜ 선언문에 λ„λ‹¬ν–ˆμ„ λ•Œ μ‹€ν–‰

5. let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μŠ€μ½”ν”„μ˜ μ‹œμž‘ μ§€μ €λ¨ΈλΆ€ν„° μ΄ˆκΈ°ν™” 단계 μ‹œμž‘ μ§€μ κΉŒμ§€ λ³€μˆ˜λ₯Ό

μ°Έμ‘°ν•  수 μ—†μ–΄μ„œ μΌμ‹œμ  μ‚¬κ°μ§€λŒ€(TDZ)κ°€ μžˆλ‹€.

 

🟣 μ „μ—­ 객체와 let

1. let μ „μ—­ λ³€μˆ˜λŠ” μ „μ—­ 객체의 ν”„λ‘œνΌν‹°κ°€ μ•„λ‹ˆμ—¬μ„œ window.foo같이 μ ‘κ·Όν•  수 μ—†λ‹€.

2. let μ „μ—­ λ³€μˆ˜λŠ” 보이지 μ•ŠλŠ” κ°œλ…μ μΈ 블둝내에 μ‘΄μž¬ν•œλ‹€.

 

πŸ‘€ const ν‚€μ›Œλ“œ

보톡은 μƒμˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

 

🟣 μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”

1. const λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”λ₯Ό λ™μ‹œμ— ν•΄μ•Όν•œλ‹€.

κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ λ¬Έλ²•μ—λŸ¬κ°€ λœ¬λ‹€.

2. 블둝 레벨 μŠ€μ½”ν”„λ₯Ό κ°€μ§€κ³  λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€.

 

🟣 μž¬ν• λ‹Ή κΈˆμ§€

const λ³€μˆ˜λŠ” μž¬μ„ μ–Έ, μž¬ν• λ‹Ή μ „λΆ€ κΈˆμ§€λœλ‹€.

 

🟣 μƒμˆ˜

1. const λ³€μˆ˜μ— μ›μ‹œ 값을 ν• λ‹Ήν•˜λ©΄ 값을 λ³€κ²½ν•  수 μ—†λ‹€.(μž¬ν• λ‹Ή λΆˆκ°€)

2. μƒμˆ˜λŠ” μƒνƒœ μœ μ§€μ™€ 가독성, μœ μ§€λ³΄μˆ˜μ˜ νŽΈμ˜μ„±μ„ μœ„ν•΄ 적극적으둜 μ‚¬μš©λœλ‹€.

3. μƒμˆ˜λŠ” ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•΄μ„œ λ‚˜μ€‘μ— 값을 λ³€κ²½ν•΄μ•Ό ν• λ•Œ

μƒμˆ˜λ§Œ λ³€κ²½ν•˜λ©΄ λ˜κΈ°λ•Œλ¬Έμ— μœ μ§€λ³΄μˆ˜μ„±μ΄ μ’‹λ‹€.

4. μ—¬λŸ¬ λ‹¨μ–΄λ‘œ μ΄λ€„μ ΈμžˆμœΌλ©΄ μ–Έλ”μŠ€μ½”μ–΄λ‘œ κ΅¬λΆ„ν•΄μ„œ μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€λ‘œ ν‘œν˜„ν•˜λŠ”κ²Œ 일반적.

 

🟣 const ν‚€μ›Œλ“œμ™€ 객체

1. 객체λ₯Ό ν• λ‹Ήν•˜λ©΄ μž¬ν• λ‹Ή 없이도 직접 변경이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— constλ₯Ό 쓰더라도 값을 λ³€κ²½ν•  수 μžˆλ‹€.

2. ν”„λ‘œνΌν‹° 동적 생성, μ‚­μ œ, ν”„λ‘œνΌν‹° κ°’μ˜ 변경을 톡해 객체λ₯Ό λ³€κ²½ν•˜λŠ” 것은 κ°€λŠ₯

3. μ΄λ•Œ 객체가 λ³€κ²½λ˜λ„ λ³€μˆ˜μ— ν• λ‹Ήλœ μ°Έμ‘° 값은 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

 

πŸ‘€ κ·Έλž˜μ„œ var? let? const?

λ³€μˆ˜ μ„ μ–Έμ—λŠ” 기본적으둜 constλ₯Ό μ‚¬μš©ν•˜κ³ 

let은 μž¬ν• λ‹Ήμ΄ ν•„μš”ν• λ•Œ ν•œμ •μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ μ’‹λ‹€.

 

Comments