let globalNum = 100;

function testFunc() {
  console.log(globalNum);
}

testFunc();  // 100 
console.log(globalNum);  // 100 

JS둜 μž‘μ„±λœ μ½”λ“œλŠ” μœ„μ—μ„œ μ•„λž˜ λ°©ν–₯으둜 순차적으둜 진행됨❗

그렇기에 'ν•¨μˆ˜'λ‚˜ 'λ³€μˆ˜'의 μ„ μ–Έλ¬Έ λ¨Όμ € μž‘μ„±ν•œ λ‹€μŒ
ν•¨μˆ˜ ν˜ΈμΆœν•˜κ±°λ‚˜ λ³€μˆ˜μ— μ ‘κ·Όν•˜λŠ” 것이 μΌλ°˜μ πŸ™†β€β™€οΈ

ν•˜μ§€λ§Œ JS의 'ν˜Έμ΄μŠ€νŒ…' νŠΉμ§• ν™œμš©ν•˜λ©΄
νŠΉμ • ν•¨μˆ˜μ˜ ν˜ΈμΆœμ΄λ‚˜ λ³€μˆ˜λ₯Ό ν™œμš©ν•˜λŠ” μ½”λ“œκ°€
ν•¨μˆ˜ λ˜λŠ” λ³€μˆ˜μ˜ 선언문보닀 μœ„μͺ½μ— μž‘μ„±λ˜μ–΄ μžˆλ”λΌλ„
😎 μ—λŸ¬ λ°œμƒμ‹œν‚€μ§€ μ•Šμ„ 수 있음 βœ…

πŸŽ£ν˜Έμ΄μŠ€νŒ…

JSμ—μ„œ λ³€μˆ˜μ™€ ν•¨μˆ˜μ˜ 선언문이 ν•΄λ‹Ή λ²”μœ„μ˜ κ°€μž₯ μœ„μͺ½μœΌλ‘œ λŒμ–΄μ˜¬λ €μ§€λŠ” λ“―ν•œ ν˜„μƒ

πŸ”₯λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… && ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…

πŸ”Ή ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ… - 두 개의 λ¬Έμžμ—΄ ν•©μΉ˜λŠ” 예제

connectStrings('study', 'hoisting');

function connectStrings(str1, str2) {
  console.log(str1 + str2);
}

일반 방식과 λ‹€λ₯΄κ²Œ ν•¨μˆ˜κ°€ μ„ μ–Έλ˜κΈ° 이전에 ν˜ΈμΆœπŸ“’

βœ¨μ½”λ“œ μ •μƒμ μœΌλ‘œ μž‘λ™λœ 이유✨
πŸ‘‰ JS 엔진이 μ½”λ“œλ₯Ό ν•΄μ„ν•˜λŠ” κ³Όμ •μ—μ„œ
이 connectStrings ν•¨μˆ˜μ˜ 호좜문 보닀
선언문을 더 λ¨Όμ € μž‘μ„±λœ μ½”λ“œλ‘œ λ°›μ•„λ“€μ˜€κΈ° λ•Œλ¬ΈπŸ˜―

πŸ”Ή λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

⚑let의 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

console.log(num1);
let num1 = 123;

🚨num1 λ³€μˆ˜κ°€ μ΄ˆκΈ°ν™” 되기 전에 μ ‘κ·Όν•  수 μ—†λ‹€λŠ” μ—λŸ¬κ°€ 뜸🚨

var와 달리 let & const둜 μ„ μ–Έλœ λ³€μˆ˜
πŸ‘‰ λ³€μˆ˜ μŠ€μ½”ν”„ μœ„μͺ½μ—μ„œ λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”κ°€ μ™„λ£Œν™” 될 λ•ŒκΉŒμ§€
☠️ TDZ λΌλŠ” 곡간에 있기 λ•Œλ¬Έ
☠️

πŸ‘»Temporal Dead Zoneβž‘μΌμ‹œμ μΈ μ‚¬κ°μ§€λŒ€
λ‹€μ‹œ 말해, λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” κ³΅κ°„βœ”

πŸ”JS 엔진이 ν•΄μ„ν•˜λŠ” μˆœμ„œλŒ€λ‘œ λ΄λ³΄μžπŸ‘€

let & constβž‘ν˜Έμ΄μŠ€νŒ… λ°œμƒν•˜μ§€ μ•ŠλŠ” 것 ❌
var와 달리 λ³€μˆ˜ μŠ€μ½”ν”„μ˜ κ°€μž₯ μœ„μͺ½μ—μ„œ
num λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”κ°€ μ™„λ£Œλ  λ•ŒκΉŒμ§€ ν•΄λ‹Ή μ½”λ“œκ°€
TDZ 곡간에 μžˆκΈ°μ— ν˜Έμ΄μŠ€νŒ… λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” κ²ƒπŸ’‘

🧐let & const둜 μ„ μ–Έλœ λ³€μˆ˜κ°€ μ΄ˆκΈ°ν™” 진행될 λ•ŒκΉŒμ§€ TDZ에 머물러 μžˆλŠ” 이유

varβž‘λ³€μˆ˜ μƒμ„±ν•œ λ‹€μŒ λ°”λ‘œ λ©”λͺ¨λ¦¬ 곡간에 λ³€μˆ˜μ˜ 곡간을 미리 ν• λ‹Ήν•΄μ£Όμ§€λ§Œ
let & constβž‘λ³€μˆ˜ μ΄ˆκΈ°ν™” 될 λ•ŒκΉŒμ§€ λ©”λͺ¨λ¦¬ 곡간이 ν™•λ³΄λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έβ­•

πŸ’£ν•΄λ‹Ή ν‚€μ›Œλ“œλ‘œ μƒμ„±λœ λ³€μˆ˜λŠ” μ‚¬μš©ν•  수 μ—†λŠ” 곡간인 TDZ에 λ“€μ–΄κ°€κ²Œ λ¨πŸ’£

ν˜Έμ΄μŠ€νŒ…μ€ JS의 κΈ°λ³Έ μ„±μ§ˆμ΄μ§€λ§Œ
ν˜Έμ΄μŠ€νŒ… 많이 λ°œμƒν•˜κ²Œ μž‘μ„±λœ μ½”λ“œλŠ” 가독성‡
μ½”λ“œλ₯Ό μ§κ΄€μ μœΌλ‘œ ν•΄μ„ν•˜κΈ° μ–΄λ €μ›Œ μ½”λ“œ 이해도‡
πŸ’₯ μ—¬λŸ¬κ°€μ§€ 였λ₯˜λ“€μ„ μΌμœΌν‚¬ 수 있음 πŸ’₯

κ°€λŠ₯ν•œ var λŒ€μ‹  letμ΄λ‚˜ const μ‚¬μš©πŸ™†β€β™€οΈ
⚠ TDZ λ•Œλ¬Έμ— μ„ μ–Έ 전에 λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ— μ ‘κ·Όν•˜μ§€ μ•Šλ„λ‘ 주의 ⚠

let num = 123;
console.log(num);

항상 μ„ μ–Έ 이후에 μ‚¬μš©ν•˜λŠ” 게 μ•ˆμ „πŸ‘

⚑var의 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

console.log(num2);
var num2 = 123;

μ΄λ²ˆμ—” var둜 μ΄μš©ν•΄ μ½”λ“œ μž‘μ„±ν•œ λ‹€μŒ 싀행해보면
λ‹€μŒκ³Ό 같이 'undefined' λΌλŠ” 값이 좜λ ₯됨❗

πŸ”»μ—λŸ¬κ°€ μ•„λ‹Œ 'undefined' 값이 좜λ ₯된 이유
πŸ‘‡ JS 엔진이 ν•΄λ‹Ή μ½”λ“œλ₯Ό μ•„λž˜μ™€ 같이 해석 ν–ˆκΈ° λ•Œλ¬Έ πŸ”₯

var num;
// 1. μ΄λ ‡κ²Œ λ³€μˆ˜μ˜ μ„ μ–Έλ¬Έλ§Œμ„ μŠ€μ½”ν”„μ˜ μ΅œμƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ¦° λ‹€μŒ

console.log(num);
// 2. μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ³  

num = 123;
// 3. λ³€μˆ˜μ˜ μ΄ˆκΈ°κ°’μ„ 할당함

JS 엔진이 ν•΄μ„ν•œ μ½”λ“œ μ‚΄νŽ΄λ³΄λ©΄
🌟num λ³€μˆ˜μ˜ 값이 ν• λ‹Ήλ˜κΈ° 이전에 λ¨Όμ € μ½”λ“œλ₯Ό μ‹€ν–‰ν–ˆκΈ° λ•Œλ¬Έμ—
num λ³€μˆ˜μ—” μ•„λ¬΄λŸ° 값도 ν• λ‹Ήλ˜μ–΄ μžˆμ§€ μ•Šμ•„ 'nudefined' 값이 좜λ ₯ λ˜λŠ” 것

profile
μ•ˆλ…•ν•˜μ„Έμš”! 퍼블리싱 & ν”„λ‘ νŠΈμ—”λ“œ 개발 곡뢀 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€!

0개의 λŒ“κΈ€