λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“š/γ„΄ JavaScript

[JavaScript] μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(Execution Context)λž€?

πŸ”— μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(Execution Context) λž€?

 

 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μœ„ν•΄ ν•„μš”ν•œ ν™˜κ²½μ΄λ‹€.

 


πŸ”— μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ μ’…λ₯˜

 

좜처 - ν•˜λ‹¨μ— ν‘œμ‹œ

 

πŸ“ μ „μ—­ μ»¨ν…μŠ€νŠΈ (Global Context)

 

  • μ „μ—­ μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” μ½”λ“œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ
  • μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ 생성이 되면, μŠ€νƒμ— μŒ“μΈλ‹€.
  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ’…λ£Œλ  λ•Œ(μ›Ή νŽ˜μ΄μ§€μ—μ„œ λ‚˜κ°€κ±°λ‚˜ λΈŒλΌμš°μ €λ₯Ό 닫을 λ•Œ) μ†Œλ©Έλœλ‹€.
  • windowκ°€ this둜 ν• λ‹Ήλœλ‹€.

πŸ“ ν•¨μˆ˜ μ»¨ν…μŠ€νŠΈ (Function Context)

 

  • ν•¨μˆ˜ 내에 μ‘΄μž¬ν•˜λŠ” μ½”λ“œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ
  • μ„ μ–Έλœ ν•¨μˆ˜κ°€ 호좜이 될 λ•Œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ 생성이 되고, μŠ€νƒμ— μŒ“μΈλ‹€.
  • ν•¨μˆ˜μ˜ λͺ¨λ“  λ™μž‘(μ‹€ν–‰)이 μ™„λ£Œλ˜λ©΄, ν•¨μˆ˜ μ»¨ν…μŠ€νŠΈλŠ” μ†Œλ©Έλœλ‹€. (ν΄λ‘œμ € μ‚¬μš©ν•˜λ©΄ μ†Œλ©ΈX)

πŸ”— μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ 객체

 

 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό ν˜•μƒν™”ν•˜κ³  κ΅¬λΆ„ν•˜λŠ” 좔상적인 κ°œλ…μ΄μ§€λ§Œ λ¬Όλ¦¬μ μœΌλ‘œλŠ” 객체의 ν˜•νƒœλ₯Ό 가지며 3가지 ν”„λ‘œνΌν‹°λ₯Ό μ†Œμœ ν•œλ‹€.

 

πŸ“ 1. λ³€μˆ˜ 객체 (Variable Object)

 

  • λ³€μˆ˜
  • λ§€κ°œλ³€μˆ˜(parameter), 인수(arguments) 정보
  • ν•¨μˆ˜ μ„ μ–Έ

πŸ“ 2. μŠ€μ½”ν”„ 체인 (Scope Chain)

 

❓ μŠ€μ½”ν”„λž€? μ˜μ—­μ„ μ˜λ―Έν•œλ‹€. (μ „μ—­ μ˜μ—­, outer ν•¨μˆ˜ μ˜μ—­, inner ν•¨μˆ˜ μ˜μ—­ ...)

❓ μŠ€μ½”ν”„μ²΄μΈμ΄λž€? μŠ€μ½”ν”„ κ°„μ˜ 이어진 μƒν•˜κ΄€κ³„λ₯Ό μ˜λ―Έν•œλ‹€.

 

 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성 ν›„, ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ”λ° μ‚¬μš©λ˜λŠ” λ³€μˆ˜λ“€μ€ λ³€μˆ˜ 객체 μ•ˆμ—μ„œ 값을 μ°Ύκ³  μ—†λ‹€λ©΄ μŠ€μ½”ν”„μ²΄μΈμ„ 따라 μ˜¬λΌκ°€λ©° μ°ΎλŠ”λ‹€.

 

  •  μ „μ—­ λ˜λŠ” ν•¨μˆ˜κ°€ μ°Έμ‘°ν•  수 μžˆλŠ” λ³€μˆ˜, ν•¨μˆ˜ μ„ μ–Έ λ“± μ •λ³΄μ˜ 리슀트

πŸ“ 3. this value

 

 this ν”„λ‘œνΌν‹°μ—λŠ” this 값이 ν• λ‹Ήλœλ‹€. this에 ν• λ‹Ήλ˜λŠ” 값은 ν•¨μˆ˜ 호좜 νŒ¨ν„΄(gloabal, functionInvocation, call·apply·bind, Construction, MethodInvication)에 μ˜ν•΄ κ²°μ •λœλ‹€.

 


 μ¦‰, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μœ„ν•΄ λ³€μˆ˜ 객체, μŠ€μ½”ν”„ 체인, this 정보듀을 λ‹΄κ³  μžˆλŠ” 곳을 'μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ'라고 ν•œλ‹€.

πŸ”Ž μ°Έκ³  자료

πŸ’‘ 같이 λ³΄λ©΄ 쒋을 Post

 

[JavaScript] μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” '이벀트 기반', 'λ…ΌλΈ”λ‘œν‚Ή' 방식을 μ‚¬μš©ν•˜κ³  'μ‹±κΈ€ μŠ€λ ˆλ“œ' 언어이닀.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹±κΈ€ μŠ€λ ˆλ“œ μ–Έμ–΄μ΄λ‹€. ν•˜μ§€λ§Œ μ‹€μ œ μ‚¬μš©μ‹œμ—λŠ” λ§Žμ€ μž‘μ—…μ΄ λ™μ‹œμ— μ²˜λ¦¬λ˜λŠ” λ©€ν‹° μŠ€λ ˆλ“œμ²˜λŸΌ λ³΄μ΄λŠ”λ° μ™œ 그런 κ²ƒμΌκΉŒ? μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ–΄λ–»κ²Œ 'λ™μ‹œμ„±(Concurrency)'을 μ§€μ›ν•˜

devjindev.tistory.com