Hello Kitty Eyes Shut
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»κ³΅λΆ€ 기둝/πŸ“Œ λ¦¬μ•‘νŠΈ 기초 μŠ€ν„°λ””

[λ¦¬μ•‘νŠΈ 기초 μŠ€ν„°λ””] JavaScript μŠ€μ½”ν”„(scope)

λ°˜μ‘ν˜•

 

 

 

 

 

 

πŸ“‘ JavaScript μŠ€μ½”ν”„ (scope)

코딩을 ν•˜λ‹€ 보면, "이 λ³€μˆ˜λŠ” μ—¬κΈ°μ„œλŠ” λ˜λŠ”λ° μ™œ μ „κΈ°μ„œλŠ” μ•ˆ λ˜μ§€?" 같은 상황을 μ’…μ’… λ§Œλ‚œλ‹€.

이런 ν˜Όλž€μ˜ 정체가 λ°”λ‘œ μŠ€μ½”ν”„(scope, λ³€μˆ˜μ˜ 유효 λ²”μœ„)λ‹€.

 

μŠ€μ½”ν”„λŠ” λ³€μˆ˜μ™€ ν•¨μˆ˜κ°€ μ ‘κ·Ό κ°€λŠ₯ν•œ λ²”μœ„λ₯Ό μ˜λ―Έν•˜λŠ”λ°,

μ‰½κ²Œ λ§ν•˜μžλ©΄, λ³€μˆ˜λ₯Ό μ„ μ–Έν–ˆμ„ λ•Œ κ·Έ λ³€μˆ˜κ°€ μ‚΄μ•„μžˆλŠ” μ˜μ—­μ΄λΌκ³  μ΄ν•΄ν•˜λ©΄ λœλ‹€.

 

 


πŸŸ₯ μ „μ—­ μŠ€μ½”ν”„ (Golbal Scope)

μ „μ—­ μŠ€μ½”ν”„λŠ” 말 κ·ΈλŒ€λ‘œ ν”„λ‘œκ·Έλž¨ 전체 μ˜μ—­μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ³€μˆ˜μ΄λ‹€.

μ–΄λ””μ„œλ“  뢈러 μ“Έ 수 μžˆμœΌλ‹ˆκΉŒ νŽΈν•˜κΈ΄ ν•˜κ² μ§€λ§Œ,

λ„ˆλ¬΄ 많이 μ“°λ©΄ μΆ©λŒμ΄λ‚˜ 예기치 λͺ»ν•œ 버그λ₯Ό λ§Œλ“€ 수 μžˆμœΌλ‹ˆ 항상 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.

 

let a = 1; //μ „μ—­ μŠ€μ½”ν”„

function funcA() {
  console.log(a); // ν•¨μˆ˜ μ•ˆμ—μ„œλ„ μ ‘κ·Ό κ°€λŠ₯
}

funcA(); // 1
console.log(a); // 1 (ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλ„ λ‹Ήμ—°νžˆ 호좜 κ°€λŠ₯)

 

 


🟧 μ§€μ—­ μŠ€μ½”ν”„ (Local Scope)

μ§€μ—­ μŠ€μ½”ν”„λŠ” νŠΉμ • μ˜μ—­ μ•ˆμ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ³€μˆ˜μ΄λ‹€.

λ”°λΌμ„œ ν•΄λ‹Ή μ˜μ—­μ΄ λλ‚˜λ©΄ λ³€μˆ˜λŠ” 사라지고, 더이상 μ ‘κ·Όν•  수 μ—†κ²Œ λœλ‹€.

 

function funcB() {
  let b = 2; // μ§€μ—­ μŠ€μ½”ν”„
  console.log(b); // 2
}

funcB();

console.log(b); // ❌ ReferenceError: b is not defined

 

bλΌλŠ” λ³€μˆ˜λŠ” funcB ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μœ νš¨ν•˜κΈ° λ•Œλ¬Έμ—

ν•¨μˆ˜ λ°–μ—μ„œ μ ‘κ·Έλ‚˜λ €κ³  ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

 

 


🟨 블둝 μŠ€μ½”ν”„ (Block Scope)

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ letκ³Ό const둜 μ„ μ–Έν•œ λ³€μˆ˜λŠ” 블둝 { } μ•ˆμ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.

 

if (true) {
  let c = 1;
  console.log(c); // 1
}

console.log(c); // ❌ ReferenceError: c is not defined

 

이처럼 λ³€μˆ˜ cλŠ” if 블둝 μ•ˆμ—μ„œλ§Œ μ“Έ 수 있고, 블둝을 λ²—μ–΄λ‚˜λŠ” μˆœκ°„ μ‚¬λΌμ§€κ²Œ λœλ‹€.

 

 

πŸ“Œ μ°Έκ³ 

varλŠ” 블둝 μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν•¨μˆ˜ μŠ€μ½”ν”„λ§Œ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ—

이런 μƒν™©μ—μ„œλ„ 접근이 κ°€λŠ₯ν•˜λ‹€κ³  ν•œλ‹€.

 

 


🟩 ν•¨μˆ˜ μ•ˆμ˜ ν•¨μˆ˜ (쀑첩 ν•¨μˆ˜ μŠ€μ½”ν”„)

ν•¨μˆ˜ μ•ˆμ— 또 λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄, μ•ˆμͺ½ ν•¨μˆ˜λŠ” λ°”κΉ₯μ—μ„œ ν˜ΈμΆœν•  수 μ—†λ‹€.

 

function funcA() {
  function funcB() {
    console.log("hello");
  }
}

// λ°”κΉ₯μ—μ„œ funcBλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•˜λ©΄
funcB(); // ❌ ReferenceError: funcB is not defined

 

이처럼 funcBλŠ” 였직 funcA μ•ˆμ—λ§Œ μ‘΄μž¬ν•˜λŠ” ν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ— μ™ΈλΆ€μ—μ„œλŠ” μ „ν˜€ μ ‘κ·Όν•  수 μ—†λ‹€.

(이런 ꡬ쑰 덕뢄에 λΆˆν•„μš”ν•˜κ²Œ λ°”κΉ₯μ—μ„œ μ ‘κ·Όν•˜μ§€ λͺ»ν•˜κ²Œ λ§‰λŠ” μΊ‘μŠν™” 효과λ₯Ό 얻을 수 μžˆλ‹€.)

 

 


 πŸ“š κ²°λ‘ 

μŠ€μ½”ν”„μ— λŒ€ν•΄ μ •λ¦¬ν•˜λ©΄μ„œ λŠλ‚€ 건, λ³€μˆ˜λ₯Ό 어디에 μ„ μ–Έν•˜λŠλƒμ— 따라 μ ‘κ·Ό κ°€λŠ₯ μ—¬λΆ€κ°€ μ™„μ „νžˆ λ‹¬λΌμ§„λ‹€λŠ” μ μ΄μ—ˆλ‹€.

μ „μ—­ λ³€μˆ˜λ₯Ό μ“°λ©΄ νŽΈν•  것 κ°™μ§€λ§Œ, μ½”λ“œκ°€ 컀질수둝 좩돌 μœ„ν—˜μ΄ 크기 λ•Œλ¬Έμ—

κ°€λŠ₯ν•œ ν•œ μ§€μ—­ μŠ€μ½”ν”„ μ•ˆμ—μ„œ λ³€μˆ˜λ₯Ό κ΄€λ¦¬ν•˜λŠ” μŠ΅κ΄€μ„ λ“€μ΄λŠ”κ²Œ 쒋을 것 κ°™λ‹€.

(μ‹€μ œλ‘œ .. λͺ¨λ“  λ³€μˆ˜λ₯Ό μ „μ—­ λ³€μˆ˜λ‘œ μ„ μ–Έν•˜λŠ” 뢄을 롌 적이 μžˆμ—ˆλŠ”λ° .. 뭐만 ν•˜λ©΄ μ—¬κΈ°μ €κΈ°μ„œ μ—λŸ¬κ°€ λ‚˜μ„œ λ„ˆλ¬΄ νž˜λ“€μ—ˆλ‹€ .........)

 

μ•žμœΌλ‘œλŠ” "이 λ³€μˆ˜κ°€ μ–΄λ””κΉŒμ§€ μ‚΄μ•„μžˆμ–΄μ•Ό ν•˜λŠ”κ°€?"λ₯Ό λ¨Όμ € κ³ λ―Όν•˜κ³ ,

κΌ­ ν•„μš”ν•œ μ΅œμ†Œ λ²”μœ„ μ•ˆμ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” μŠ΅κ΄€μ„ λ“€μ—¬μ•Όκ² λ‹€. 😎

λ°˜μ‘ν˜•