πŸ€” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 지역 λ³€μˆ˜, μ „μ—­ λ³€μˆ˜

λ°•ν¬μˆ˜Β·2023λ…„ 11μ›” 9일
0
post-thumbnail

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ³€μˆ˜μ˜ μ‚¬μš© λ²”μœ„μ— λ”°λΌμ„œ μ „μ—­λ³€μˆ˜(global)κ³Ό μ§€μ—­λ³€μˆ˜(local)둜 λ‚˜λ‰œλ‹€. var둜 μ„ μ–Έ μ‹œ, scopeλŠ” λ°˜λ“œμ‹œ ν•¨μˆ˜μ˜ μ˜μ—­λ§Œ νŒλ‹¨ν•œλ‹€.

μ „μ—­ λ³€μˆ˜ : ν•¨μˆ˜ λ°–μ—μ„œ μ„ μ–Έλ˜κ±°λ‚˜ ν•¨μˆ˜ μ•ˆμ—μ„œ var ν‚€μ›Œλ“œ 없이 μ„ μ–Έ
지역 λ³€μˆ˜ : ν•¨μˆ˜ μ•ˆμ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έ, μ„ μ–Έλœ ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯

**μ˜ˆμ‹œ μ½”λ“œ**
μ „μ—­ λ³€μˆ˜
var x;

function f() {
  // jsλŠ” λ§€κ°œλ³€μˆ˜μ— μžλ£Œν˜• μ•ˆμ¨μ€Œ
  var y; // 지역
  var x = 20; // 지역
  y = 10;
  // 항상 μŠ€μ½”ν”„λŠ” μžμ‹ κ³Ό κ°€μž₯ κ°€κΉŒμš΄ μ˜μ—­μ„ μ°ΎκΈ° λ•Œλ¬Έμ—, μ§€μ—­λ³€μˆ˜ yλ₯Ό 의미
  z = 30;
  // varλ₯Ό 쓰지 μ•Šμ•˜κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ μ•ˆμ—μ„œ 선언을 ν–ˆλ‹€κ³  μΈμ‹ν•˜μ§€ μ•ŠλŠ”λ‹€.
  // λ˜ν•œ 지역 μžˆλŠ” μŠ€μ½”ν”„κ°€ μ—†κΈ° λ•Œλ¬Έμ— μžμ—°μŠ€λŸ½κ²Œ μ „μ—­μœΌλ‘œ 인식
}

f();
console.log(x); // undifined

console.log(z); // 30이 λ‚˜μ˜¨λ‹€.

πŸ€— κ·Έλ ‡λ‹€λ©΄, 지역 λ³€μˆ˜μ™€ μ „μ—­ λ³€μˆ˜μ˜ 이름이 같을 경우 μ–΄λ–»κ²Œ μ ‘κ·Όν•˜λŠ”κ°€?

  • global 객체 (nodeμ—μ„œ λ§Œλ“€μ–΄μ Έμ„œ λΈŒλΌμš°μ €μ—μ„œλŠ” 싀행이 λΆˆκ°€λŠ₯.)
  • window 객체 (λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰ κ°€λŠ₯)
  • this 객체 (λΈŒλΌμš°μ €, λ…Έλ“œ λͺ¨λ‘ μ‹€ν–‰ κ°€λŠ₯)
  • globalThis 객체 (λ²ˆμ—­ν•  μ „μ—­ 객체 λͺ¨λ‘ λ‚˜μ˜€κ²Œ ν•΄μ€Œ)

βœ… κ°€μž₯ 합리적인 선택은 globalThisλ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.
λΈŒλΌμš°μ € λ…Έλ“œ λͺ¨λ‘ 싀행이 κ°€λŠ₯ν•˜λ©° μ „μ—­ 객체λ₯Ό λͺ¨λ‘ λ‚˜μ˜€κ²Œ ν•΄μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€.

βœ… this같은 κ²½μš°λ„ 같은 쑰건인데 μ™œ λ˜λ„λ‘ ν”Όν•΄μ•Ό ν•˜λŠ”κ°€?
thisλŠ” 객체λ₯Ό λ§Œλ“€ λ•Œ 객체 μ˜μ—­μ΄ μƒκΈ°λŠ”λ° κ·Έ μ˜μ—­μ„ μ˜λ―Έν•˜κΈ°λ„ ν•œλ‹€. 객체 μ•ˆμ—μ„œ μ „μ—­ 객체λ₯Ό μ“΄λ‹€κ³  thisλ₯Ό μ“°λ©΄ κ·Έλ•ŒλΆ€ν„°λŠ” μ „μ—­ 객체가 μ•„λ‹Œ μ‚¬μš©μž μ •μ˜ 객체λ₯Ό μ˜λ―Έν•˜κ²Œ λœλ‹€.

profile
ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžμž…λ‹ˆλ‹€ :)

0개의 λŒ“κΈ€