Frontend/JavaScript

μŠ€μ½”ν”„ 체인

wam 2024. 5. 8. 17:49

πŸ’‘ μŠ€μ½”ν”„ 체인 : 꼬리λ₯Ό λ¬Όκ³  계속 λ²”μœ„λ₯Ό λ„“νžˆλ©΄μ„œ μ°ΎλŠ” 관계λ₯Ό μŠ€μ½”ν”„ 체인이라 ν•œλ‹€. 

πŸ’‘λ‚΄λΆ€ ν•¨μˆ˜μ—μ„œλŠ” μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯ν•˜μ§€λ§Œ μ™ΈλΆ€ ν•¨μˆ˜μ—μ„œλŠ” λ‚΄λΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†λ‹€.

 

 

  • μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜μ˜ κ΄€κ³„μ—μ„œ μŠ€μ½”ν”„ 체인(scope chain)μ΄λž€ κ°œλ…μ΄ λ‚˜μ˜¨λ‹€.
  • λ‚΄λΆ€ ν•¨μˆ˜μ—μ„œλŠ” μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯ν•˜μ§€λ§Œ μ™ΈλΆ€ ν•¨μˆ˜μ—μ„œλŠ” λ‚΄λΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†λ‹€.

 

 

λͺ¨λ“  ν•¨μˆ˜λ“€μ€ μ „μ—­ 객체에 μ ‘κ·Όν•  수 μžˆλ‹€.

var name = 'zero';
function outer() {
  console.log('μ™ΈλΆ€', name); // zero
  function inner() {
    var enemy = 'nero';
    console.log('λ‚΄λΆ€', name); // zero
  }
  inner();
}
outer();
console.log(enemy); // undefined
  • inner ν•¨μˆ˜λŠ” name λ³€μˆ˜λ₯Ό μ°ΎκΈ° μœ„ν•΄ λ¨Όμ € 자기 μžμ‹ μ˜ μŠ€μ½”ν”„μ—μ„œ μ°Ύκ³ ,
  • μ—†μœΌλ©΄ ν•œ 단계 μ˜¬λΌκ°€ outer μŠ€μ½”ν”„μ—μ„œ μ°Ύκ³ , μ—†μœΌλ©΄
  • λ‹€μ‹œ μ˜¬λΌκ°€ κ²°κ΅­ μ „μ—­ μŠ€μ½”ν”„μ—μ„œ μ°ΎλŠ”λ‹€.
  • μ „μ—­ μŠ€μ½”ν”„μ—μ„œ name λ³€μˆ˜λ₯Ό μ°Ύμ•„μ„œ 'zero'λΌλŠ” 값을 μ–»λŠ”λ‹€.
  • λ§Œμ•½ μ „μ—­ μŠ€μ½”ν”„μ—λ„ μ—†λ‹€λ©΄ λ³€μˆ˜λ₯Ό μ°Ύμ§€ λͺ»ν•˜μ˜€λ‹€λŠ” μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

 

 

μ΄λ ‡κ²Œ 꼬리λ₯Ό λ¬Όκ³  계속 λ²”μœ„λ₯Ό λ„“νžˆλ©΄μ„œ μ°ΎλŠ” 관계λ₯Ό μŠ€μ½”ν”„ 체인이라고 λΆ€λ₯Έλ‹€.