JavaScript

μŠ€μ½”ν”„ 체인(Scope chain)

YunCow 2022. 8. 28. 19:39

μŠ€μ½”ν”„ μ²΄μΈμ΄λž€?

  • μŠ€μ½”ν”„ 체인은 μŠ€μ½”ν”„λ“€μ΄ κ³„μΈ΅μ μœΌλ‘œ μ—°κ²°λœ 것을 μŠ€μ½”ν”„ 체인이라 ν•œλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μŠ€μ½”ν”„ 체인을 톡해 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” μ½”λ“œμ˜ μŠ€μ½”ν”„μ—μ„œ μ‹œμž‘ν•΄μ„œ μƒμœ„ μŠ€μ½”ν”„ λ°©ν–₯으둜 μ΄λ™ν•˜λ©° μ„ μ–Έλœ λ³€μˆ˜λ₯Ό κ²€μƒ‰ν•œλ‹€. 이런 λ°©μ‹μœΌλ‘œ 움직이기에 μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œλ„ μ°Έμ‘°ν•  수 μžˆλ‹€. ( μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ 단방ν–₯으둜 μ—°κ²° )
  • μŠ€μ½”ν”„ 체인은 싀체가 μ‘΄μž¬ν•˜λ©°, λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•΄ μ•Œμ•„μ•Ό ν•˜λŠ”λ° ꡉμž₯히 κΉŠμ€ λΆ€λΆ„μ΄λ―€λ‘œ λ”°λ‘œ 천천히 μ•Œμ•„λ³΄λŠ”κ²ƒμ„ μΆ”μ²œν•œλ‹€. κ°„λ‹¨ν•˜κ²Œ λ³€μˆ˜ μ„ μ–Έμ‹œ λ³€μˆ˜ μ‹λ³„μžκ°€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— key둜 등둝이 되고 λ³€μˆ˜ 할당이 되면 λ ‰μ‹œμ»¬ν™˜κ²½μ˜ λ³€μˆ˜ μ‹λ³„μžμ— ν•΄λ‹Ήν•˜λŠ” 값을 λ³€κ²½ν•œλ‹€.
const foo = () => {
    console.log('μ „μ—­ ν•¨μˆ˜ foo')

    
}
const bar = () => {

    const foo = () => {
        console.log('쀑첩 ν•¨μˆ˜ foo')
    }
    foo(); // ν•¨μˆ˜ foo 호좜
}
bar();

// μ½˜μ†”λ‘œκ·Έμ—λŠ” 쀑첩 ν•¨μˆ˜ foo κ°€ λ‚˜μ˜¨λ‹€.
  • ν•΄λ‹Ή μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ barν•¨μˆ˜κ°€ 호좜되고 이 ν›„ ν•¨μˆ˜ fooλ₯Ό ν˜ΈμΆœν•˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‹λ³„μž fooλ₯Ό κ²€μƒ‰ν•œλ‹€.
  • 그럼 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ λ¨Όμ € ν•¨μˆ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μž fooλ₯Ό κ²€μƒ‰ν•œλ‹€. 이 λ•Œ λ³€μˆ˜λ₯Ό κ²€μƒ‰ν•˜λŠ” 것과 λ§ˆμ°¬κ°€μ§€λ‘œ μƒμœ„μŠ€μ½”ν”„λ‘œ μ˜¬λΌκ°€λ©° 탐색을 ν•˜λ―€λ‘œ barν•¨μˆ˜ 내에 μžˆλŠ” fooλ₯Ό 찾은 μˆœκ°„ 검색이 μ’…λ£Œλœλ‹€.

μŠ€μ½”ν”„ 체인

β€» μŠ€μ½”ν”„ 체인이 μ–΄λ ΅λ‹€λ©΄ μŠ€μ½”ν”„μ— λŒ€ν•΄ λ‹€μ‹œ μ•Œμ•„λ³΄μž