πŸ’» TIL 23.03.06

κΉ€μ˜μš°(Yeongwoo Kim)Β·2023λ…„ 3μ›” 6일
0
post-thumbnail

🀷 면접을 μ€€λΉ„ν•˜λ©° κ³΅λΆ€ν•œ λ‚΄μš©μ„ 끄적거렀 볼까 ν•œλ‹€.

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

  • ν˜Έμ΄μŠ€νŒ…μ΄λž€ μ‹€μ œ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” λŸ°νƒ€μž„ 이전에 λ³€μˆ˜μ˜ μ„ μ–Έ 단계가 μ½”λ“œμ˜ 맨 μœ„λ‘œ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ§•μ΄λ‹€.

ν˜Έμ΄μŠ€νŒ…μ˜ λŒ€μƒ

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” let, constλ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  선언을 ν˜Έμ΄μŠ€νŒ…ν•©λ‹ˆλ‹€.
  • λ³€μˆ˜λŠ” 3가지 단계λ₯Ό 거처 μƒμ„±λ©λ‹ˆλ‹€.
    • μ„ μ–Έ 단계 : λ³€μˆ˜λ₯Ό 객체에 등둝

    • μ΄ˆκΈ°ν™” 단계 : λ³€μˆ˜ 객체에 λ“±λ‘λœ λ³€μˆ˜λ₯Ό μœ„ν•œ 곡간을 λ©”λͺ¨λ¦¬μ— 확보. μ΄λ•Œ λ³€μˆ˜λŠ” undefined둜 μ΄ˆκΈ°ν™”

    • ν• λ‹Ή 단계 : undefined둜 μ΄ˆκΈ°ν™”λœ λ³€μˆ˜μ— μ‹€μ œ 값을 ν• λ‹Ή.

      ν•΄λ‹Ή λΆ€λΆ„μ—μ„œ var와 es6μ—μ„œ λ„μž…λœ let,constμ™€μ˜ 차이점이 생긴닀.
      varλŠ” μ„ μ–Έ 단계와 μ΄ˆκΈ°ν™” 단계가 ν•œλ²ˆμ— 이뀄진닀.
      
      console.log(a) // undefined
      var a = 12;
      console.log(a) // 12
      
      ν•˜μ§€λ§Œ const와 let의 경우 μ„ μ–Έ 단계와 μ΄ˆκΈ°ν™” 단계가 λΆ„λ¦¬λ˜μ–΄ 이루어지기 λ•Œλ¬Έμ—, 
      μŠ€μ½”ν”„μ— λ³€μˆ˜λ₯Ό 등둝(μ„ μ–Έ 단계)ν•˜μ§€λ§Œ μ΄ˆκΈ°ν™” λ‹¨κ³„λŠ” λ³€μˆ˜ 선언문에 λ„λ‹¬ν–ˆμ„ λ•Œ μ‹€ν–‰ 되기 λ•Œλ¬Έμ— 
      μ΄ˆκΈ°ν™” 이전에 λ³€μˆ˜μ— μ ‘κ·Όν•˜λ©΄ μ°Έμ‘° μ—λŸ¬(ReferenceError)κ°€ λ°œμƒν•œλ‹€.
      
      

      ❔ κ·Έλ ‡λ‹€λ©΄ μ–΄λ–€ 이유둜 es6에 μΆ”κ°€λœ const,let은 μ„ μ–Έ, μ΄ˆκΈ°ν™” 단계λ₯Ό κ΅¬λΆ„ν–ˆμ„κΉŒ?

      varλŠ” 쀑볡 선언이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. ν•΄λ‹Ή 뢀뢄이 μ™œ λ¬Έμ œκ°€ λ˜λŠ”μ§€λŠ” μ½”λ“œλ₯Ό 봐보도둝 ν•˜μž

      var PersonName = 'κΉ€μ•„λ¬΄κ°œ';
      console.log(`그의 이름은 ${PersonName}μž…λ‹ˆλ‹€.`); //κΉ€μ•„λ¬΄κ°œ
      var PersonName = 'κΉ€μ§„μ§œμ§„μ§œ';
      console.log(`그의 이름은 ${PersonName}μž…λ‹ˆλ‹€.`); //κΉ€μ§„μ§œμ§„μ§œ

      μœ„μ™€ 같이 짧은 μ½”λ“œλ§Œ 보더라도 λ‚΄κ°€ "κΉ€μ•„λ¬΄κ°œ"에 λŒ€ν•œ 정보λ₯Ό 가진 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  싢어도 μ€‘λ³΅λœ λ³€μˆ˜λͺ…μœΌλ‘œ "κΉ€μ§„μ§œμ§„μ§œ"κ°€ λ‹€μ‹œ μ„ μ–Έλ˜μ—ˆκΈ° λ•Œλ¬Έμ— "κΉ€μ•„λ¬΄κ°œ"에 λŒ€ν•œ 정보λ₯Ό λ‹€μ‹œ κ°€μ Έμ˜¬ 수 μ—†κ²Œλœλ‹€. λ§Œμ•½ μˆ˜μ‹­μ—μ„œ μˆ˜λ°±μ€„μ΄ λ˜λŠ” μ½”λ“œμ—μ„œ ν•΄λ‹Ή λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ½€λ‚˜ 였랜 μ‹œκ°„μ΄ 걸릴 수 μžˆλ‹€.
      ν•˜μ§€λ§Œ let,constλ₯Ό μ‚¬μš©ν•˜λ©΄ 같은 λ³€μˆ˜λͺ…을 μ€‘λ³΅ν•΄μ„œ μ‚¬μš©ν•  수 μ—†κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή λ³€μˆ˜ 선언을 ꢌμž₯ν•˜λŠ” 것이닀.

2. μŠ€μ½”ν”„

  • λ³€μˆ˜ 이름, ν•¨μˆ˜ 이름과 같이 μ‹λ³„μžκ°€ μ°Έμ‘°ν•  수 μžˆλŠ” 유효 λ²”μœ„λ₯Ό λœ»ν•œλ‹€.

μ’…λ₯˜

  • ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„
    • ν•¨μˆ˜μ— μ˜ν•΄μ„œλ§Œ μŠ€μ½”ν”„κ°€ ν˜•μ„±λ¨
    • var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜
  • 블둝 레벨 μŠ€μ½”ν”„
    • μ½”λ“œ 블둝 λ‹¨μœ„μ˜ μŠ€μ½”ν”„κ°€ ν˜•μ„±λ¨
    • let, const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜

λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  λ•Œ JS엔진은 μžμ‹ μ˜ μŠ€μ½”ν”„μ— λ³€μˆ˜κ°€ μ—†μœΌλ©΄ μƒμœ„ μŠ€μ½”ν”„ λ°©ν–₯으둜 μ΄λ™ν•˜λ©° μ„ μ–Έλœ λ³€μˆ˜λ₯Ό κ²€μƒ‰ν•œλ‹€. 이λ₯Ό μŠ€μ½”ν”„ 체인이라고 ν•œλ‹€.

예λ₯Ό λ“€μ–΄λ³΄μž

var x = 1;

function foo() {
  var x = 10;
  bar();
}

function bar() {
  console.log(x);
}

foo(); // ?
bar(); // ?

ν•΄λ‹Ή μ½”λ“œλ₯Ό λ³΄μ•˜μ„ λ•Œ JSκ°€ 동적 μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄λŠ”지 λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄λŠ”지 잘 λͺ¨λ₯Έλ‹€λ©΄ κ²°κ³Ό 값을 동적 μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄λŠ” 10, 1둜 μ˜ˆμƒν–ˆμ„ 것이닀. ν•˜μ§€λ§Œ JSλŠ” λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄κΈ° λ•Œλ¬Έμ— κ²°κ³Ό 값은 1,1이 λ‚˜μ˜¨λ‹€. μ΄λ•Œ λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λž€ λ¬΄μ—‡μΌκΉŒ?

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λŠ” 정적 μŠ€μ½”ν”„λ‘œ μƒμœ„ μŠ€μ½”ν”„κ°€ λ™μ μœΌλ‘œ λ³€ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜ μ •μ˜κ°€ 평가 λ˜λŠ” μ‹œμ μ— μƒμœ„ μŠ€μ½”ν”„κ°€ μ •μ μœΌλ‘œ κ²°μ •λœλ‹€. 즉, JS의 μƒμœ„ μŠ€μ½”ν”„λŠ” μ–΄λ””μ„œ ν˜ΈμΆœν–ˆλŠ”μ§€κ°€ μ•„λ‹Œ μ–΄λ””μ„œ μ •μ˜ν–ˆλŠ”μ§€μ— 따라 κ²°μ •λœλ‹€. 즉 barλŠ” μ „μ—­ μŠ€μ½”ν”„λ₯Ό κΈ°μ–΅ν•˜κ³  μžˆλ‹€κ°€ xλ₯Ό μ „μ—­μ—μ„œ 찾게 되기 λ•Œλ¬Έμ— κ²°κ³Ό 값이 1,1이 λœλ‹€.

To be continued...

profile
μ°¨κ·Όμ°¨κ·Ό μ„±μž₯ν•˜λŠ” κ°œλ°œμžμž…λ‹ˆλ‹€

0개의 λŒ“κΈ€