πŸ“–12. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ 콜 μŠ€νƒ

Lee JinoΒ·2022λ…„ 9μ›” 23일
0

πŸ“– μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ 콜 μŠ€νƒ

πŸš€ 1. Execution context(μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ)의 μ •μ˜

  • μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” ν™˜κ²½μ„ μ˜λ―Έν•œλ‹€.

    μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λŒ€ν‘œμ μœΌλ‘œ 두 가지 νƒ€μž…μ˜ Execution contextκ°€ μžˆλ‹€.

  • μ‹€ν–‰ν•  μ½”λ“œμ— μ œκ³΅ν•  ν™˜κ²½ 정보듀을 λͺ¨μ•„놓은 κ°μ²΄λ“€λ‘œ
    μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 동적 μ–Έμ–΄λ‘œμ„œμ˜ 성격을 κ°€μž₯ 잘 νŒŒμ•…ν•  수 μžˆλŠ” κ°œλ…μ΄λ‹€.

▢️ Global Execution context

  • μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 처음 μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ Global Execution Contextκ°€ μƒμ„±λœλ‹€. 생성 κ³Όμ •μ—μ„œ μ „μ—­ 객체인 Window Object (NodeλŠ” Global) λ₯Ό μƒμ„±ν•˜κ³  thisκ°€ Window 객체λ₯Ό 가리킀도둝 ν•œλ‹€.

▢️ Function Execution context

  • μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 ν•¨μˆ˜κ°€ 호좜 될 λ•Œλ§ˆλ‹€ 호좜 된 ν•¨μˆ˜λ₯Ό μœ„ν•œ Execution Contextλ₯Ό μƒμ„±ν•œλ‹€.
    λͺ¨λ“  ν•¨μˆ˜λŠ” ν˜ΈμΆœλ˜λŠ” μ‹œμ μ— μžμ‹ λ§Œμ˜ Execution Contextλ₯Ό 가진닀.

▢️ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ ν™œμ„±ν™”λ˜λŠ” μ‹œμ μ— λ‹€μŒκ³Ό 같은 ν˜„μƒμ΄ λ°œμƒν•œλ‹€.

  • ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•œλ‹€(μ„ μ–Έλœ λ³€μˆ˜λ₯Ό μœ„λ‘œ λŒμ–΄μ˜¬λ¦°λ‹€)
  • μ™ΈλΆ€ ν™˜κ²½ 정보λ₯Ό κ΅¬μ„±ν•œλ‹€
  • this 값을 μ„€μ •ν•œλ‹€.

πŸš€ 2. μ½œμŠ€νƒ(call stack)의 μ •μ˜

  • μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄μ„œ μƒμ„±λ˜λŠ” Execution Contextλ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰

  • 엔진이 처음 scriptλ₯Ό μ‹€ν–‰ν•  λ•Œ, Global Execution Contextλ₯Ό μƒμ„±ν•˜κ³  이λ₯Ό Call Stack에 pushν•œλ‹€.

  • κ·Έ ν›„ 엔진이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ§ˆλ‹€ ν•¨μˆ˜λ₯Ό μœ„ν•œ Execution Contextλ₯Ό μƒμ„±ν•˜κ³  이λ₯Ό Call Stack에 push ν•œλ‹€.

  • μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 Call Stack의 Top에 μœ„μΉ˜ν•œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©° ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ stackμ—μ„œ 제거(pop)ν•˜κ³  μ œμ–΄λ₯Ό λ‹€μŒ Top에 μœ„μΉ˜ν•œ ν•¨μˆ˜λ‘œ μ΄λ™ν•œλ‹€.

=> 1쀄 μš”μ•½ : ν”„λ‘œκ·Έλž¨μ΄ ν•¨μˆ˜ ν˜ΈμΆœμ„ μΆ”μ ν• λ•Œ μ‚¬μš©ν•œλ‹€.

profile
μ•ˆλ…•ν•˜μ„Έμš”

0개의 λŒ“κΈ€