JavaScript (Hoisting)

μœ κ΄‘μ§„Β·2023λ…„ 8μ›” 6일
1

1. πŸ“ŒHoistingμ΄λž€

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨μˆ˜ 선언이 μ½”λ“œμ˜ 맨 μœ„λ‘œ λŒμ–΄μ˜¬λ €μ§€λŠ” λ™μž‘μ„ λ§ν•œλ‹€.

λ³€μˆ˜μ™€ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° 전에도 μ‚¬μš©ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ 보이게 ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ΄λ‹€.

ν˜Έμ΄μŠ€νŒ…μ˜ κ°œλ…μ„ μž‘κΈ°μ „μ— 이것뢀터 μ•Œκ³ κ°€μž.

2. πŸ“Œμžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ³€μˆ˜ 생성 단계

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 총 3단계에 κ±Έμ³μ„œ λ³€μˆ˜λ₯Ό μƒμ„±ν•œλ‹€.

πŸ“–μ„ μ–Έ : μŠ€μ½”ν”„μ™€ λ³€μˆ˜ 객체가 μƒμ„±λ˜κ³ , μŠ€μ½”ν”„κ°€ λ³€μˆ˜ 객체λ₯Ό μ°Έμ‘°ν•œλ‹€. μ΄ˆκΈ°ν™” μ „κΉŒμ§€λŠ” TDZ μƒνƒœμ΄λ‹€.

<script>
ex) let name;
</script>

πŸ“–μ΄ˆκΈ°ν™” : λ³€μˆ˜ 객체 값을 μœ„ν•œ 곡간을 λ©”λͺ¨λ¦¬μ— ν• λ‹Ήν•œλ‹€. 이 λ•Œ ν• λ‹Ήλ˜λŠ” 값은 undefinedλ‹€.

<script>
ex) let name = 'μœ κ΄‘μ§„';
</script>

πŸ“–ν• λ‹Ή : λ³€μˆ˜μ— μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•  λ•Œλ§ˆλ‹€ ν• λ‹Ή 단계가 μ‹€ν–‰λœλ‹€. λ³€μˆ˜μ˜ 값이 λ³€κ²½λ˜λ©΄ ν•΄λ‹Ή 값이 λ©”λͺ¨λ¦¬μ— μ—…λ°μ΄νŠΈ λœλ‹€.

<script>
ex) name = '홍길동';
</script>

그럼 이제 ν˜Έμ΄μŠ€νŒ…μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄μž.

3. πŸ“Œλ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… (var, let, const)

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

<script>
   document.write('<br>a:',a);
   var a = 10; // undefined, ν˜Έμ΄μŠ€νŒ… κΈ°λŠ₯이 μžλ™ λ°œμƒ. λΉ„κΆŒμž₯
</script>

varλŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”κ°€ 이루어진닀. 즉, μ„ μ–Έκ³Ό λ™μ‹œμ— undefinedκ°€ ν• λ‹Ήλœλ‹€. λ˜ν•œ,

var둜 μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ³€μˆ˜ 선언이 ν•΄λ‹Ή μŠ€μ½”ν”„μ˜ 맨 μœ„λ‘œ λŒμ–΄μ˜¬λ €μ§€λŠ” ν˜Έμ΄μŠ€νŒ…μ΄ μžλ™μœΌλ‘œ λ°œμƒν•œλ‹€.

λ”°λΌμ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° 전에 μ‚¬μš©ν•˜λ”λΌλ„ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. λŒ€μ‹  값은 undefined으둜 λœλ‹€.

2. let, const ν˜Έμ΄μŠ€νŒ…

<script>
  document.write('<br>a:',ab);
  let ab = 10; 
  // Uncaught ReferenceError: Cannot access 'ab' before initialization
  document.write('<br>a:',abc);
  const abc = 10; 
  // Uncaught ReferenceError: Cannot access 'abc' before initialization
</script>

let, const 둜 μ„ μ–Έλœ λ³€μˆ˜λ₯Ό μ„ μ–Έλ¬Έ 이전에 μž‘μ„±ν•˜λ©΄ μ°Έμ‘° μ—λŸ¬(ReferenceError)κ°€ λ°œμƒν•œλ‹€.

let, const 둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” var 둜 μ„ μ–Έλœ λ³€μˆ˜μ™€λŠ” 달리 μ„ μ–Έ 단계와 μ΄ˆκΈ°ν™” 단계가 λΆ„λ¦¬λ˜μ–΄ μ§„ν–‰λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

그러면 ν˜„λŒ€ JavaScriptμ—μ„œ 많이 μ‚¬μš©λ˜κ³  μžˆλŠ” let, const듀이 ν˜Έμ΄μŠ€νŒ…μ„ λ°œμƒλ˜μ§€ μ•ŠκΈ° μœ„ν•΄μ„œλŠ” μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

방법은 κ°„λ‹¨ν•˜λ‹€.

λ¨Όμ € 좜λ ₯ν•˜κΈ° 전에 λ¨Όμ € λ³€μˆ˜λ₯Ό μ„ μ–Έκ³Ό, μ΄ˆκΈ°ν™”λ₯Ό λ¨Όμ € ν•΄μ£Όλ©΄ λœλ‹€.

<script>
  const abc = 10;
  document.write('<br>a:',abc);
</script>

λ‘λ²ˆμ§Έ 방법은 ν•¨μˆ˜ 선언문을 μ‚¬μš©ν•˜μ—¬ ν˜Έμ΄μŠ€νŒ…μ„ μ œμ–΄ν•˜λŠ” 방법이닀.

<script>
   academytwo(); // "μ—μ΄μ½˜μ•„μΉ΄λ°λ―Έ"

   function academytwo () {
     console.log("μ—μ΄μ½˜μ•„μΉ΄λ°λ―Έ");
   };
</script>
profile
λ°±μ—”λ“œ 개발자 μœ κ΄‘μ§„ μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€