EXECUTION CONTEXT

λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(execution context)λŠ” scope, hosting, this, function, closure λ“±μ˜ λ™μž‘μ›λ¦¬λ₯Ό λ‹΄κ³  μžˆλŠ” ν•΅μ‹¬μ›λ¦¬λ‘œ λ‹€λ₯Έ 데이터에 μ ‘κ·Όν•  수 μžˆλŠ”μ§€, μ–΄λ–»κ²Œ ν–‰λ™ν•˜λŠ”μ§€λ₯Ό κ·œμ •ν•œλ‹€.

ECMAScript에 λ”°λ₯΄λ©΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό ν˜•μƒν™”ν•˜κ³ , κ΅¬λΆ„ν•˜λŠ” 좔상적인 κ°œλ…μœΌλ‘œ 즉, μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μœ„ν•΄ ν•„μš”ν•œ ν™˜κ²½μ΄λΌ 말할 수 μžˆλ‹€.

  • μ „μ—­ μ½”λ“œ : 전체 μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” μ½”λ“œ

  • eval μ½”λ“œ : eval ν•¨μˆ˜λ‘œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ

  • ν•¨μˆ˜ μ½”λ“œ : ν•¨μˆ˜ 내에 μ‘΄μž¬ν•˜λŠ” μ½”λ“œ

일반적으둜 μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλŠ” μ „μ—­ μ½”λ“œμ™€ ν•¨μˆ˜ λ‚΄ μ½”λ“œμ΄λ‹€.

싀행에 ν•„μš”ν•œ 정보

  • λ³€μˆ˜ : μ „μ—­λ³€μˆ˜, μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, 객체의 ν”„λ‘œνΌν‹°

  • ν•¨μˆ˜ μ„ μ–Έ

  • scope

  • this

var x = 'xxx';

function foo(){
  var y = 'yyy';

  function bar(){
    var z = 'zzz';
    console.log(x + y + z);
  }
  bar();
}
foo();

μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μ•„λž˜μ™€ 같이 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(stack)이 μƒμ„±ν•˜κ³  μ†Œλ©Έλœλ‹€. ν˜„μž¬ μ‹€ν–‰ 쀑인 μ»¨ν…μŠ€νŠΈμ™€ 상관 μ—†λŠ” μ½”λ“œ(예λ₯Ό λ“€μ–΄ λ‹€λ₯Έ ν•¨μˆ˜)κ°€ μ‹€ν–‰λ˜λ©΄ μƒˆλ‘œμš΄ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λœλ‹€.

  1. 컨트둀이 μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ‘œ μ΄λ™ν•˜λ©΄ 논리적 μŠ€νƒ ꡬ쑰λ₯Ό κ°€μ§€λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ΄ μƒμ„±λœλ‹€.

  2. μ „μ—­ μ½”λ“œ(global code)둜 컨트둀이 μ§„μž…ν•˜λ©΄ μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜κ³  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— μŒ“μΈλ‹€. μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ’…λ£Œλ λ•Œ(μ›Ή νŽ˜μ΄μ§€μ—μ„œ λ‚˜κ°€κ±°λ‚˜ λΈŒλΌμš°μ €λ₯Ό λ‹«μ„λ•Œ)κΉŒμ§€ μœ μ§€λœλ‹€.

  3. ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜λ©° 직전에 μ‹€ν–‰λœ μ½”λ“œ λΈ”λ‘μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μœ„μ— μŒ“μΈλ‹€.

  4. ν•¨μˆ˜ 싀행이 λλ‚˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό νŒŒκΈ°ν•˜κ³  μ§μ „μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— μ»¨νŠΈλ‘€μ„ λ°˜ν™˜ν•œλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” ν¬ν•¨λœ μ½”λ“œκ°€ λͺ¨λ‘ 싀행될 λ•Œ νŒŒκΈ°λ˜λŠ”λ°, μ΄λ•Œ ν•΄λ‹Ή μ»¨ν…μŠ€νŠΈ λ‚΄λΆ€μ—μ„œ μ •μ˜λœ λ³€μˆ˜μ™€ ν•¨μˆ˜λ„ ν•¨κ»˜ νŒŒκ΄΄λœλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 객체

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

Variable Object ( VO ) λ³€μˆ˜κ°μ²΄

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 싀행에 ν•„μš”ν•œ μ—¬λŸ¬ 정보듀을 담을 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° 이λ₯Ό Variable Object라고 ν•œλ‹€. Variable ObjectλŠ” μ½”λ“œκ°€ 싀행될 λ•Œ 엔진에 μ˜ν•΄ 참쑰되며 μ½”λ“œμ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λ‹€.

  • λ³€μˆ˜

  • λ§€κ°œλ³€μˆ˜(parameter)와 인수(arguments)

  • ν•¨μˆ˜ μ„ μ–Έ( ν•¨μˆ˜ ν‘œν˜„μ‹ μ œμ™Έ )

μ „μ—­ μ»¨ν…μŠ€νŠΈ

Variable ObjectλŠ” μœ μΌν•˜λ©° μ΅œμƒμœ„μ— μœ„μΉ˜ν•˜κ³  λͺ¨λ“  μ „μ—­ λ³€μˆ˜, μ „μ—­ ν•¨μˆ˜ 등을 ν¬ν•¨ν•˜λŠ” μ „μ—­ 객체(Global Object )λ₯Ό 가리킨닀. μ „μ—­ κ°μ²΄λŠ” 전역에 μ„ μ–Έλœ μ „μ—­ λ³€μˆ˜μ™€ μ „μ—­ ν•¨μˆ˜λ₯Ό ν”„λ‘œνΌν‹°λ‘œ μ†Œμœ ν•œλ‹€.

ν•¨μˆ˜ μ»¨ν…μŠ€νŠΈ

Variable ObjectλŠ” ν™œμ„± 객체(Activation Object)λ₯Ό 가리킀며 맀개 λ³€μˆ˜μ™€ μΈμˆ˜λ“€μ˜ 정보λ₯Ό λ°°μ—΄μ˜ ν˜•νƒœλ‘œ λ‹΄κ³  μžˆλŠ” 객체인 arguments objectκ°€ μΆ”κ°€λœλ‹€.

Scope Chain

Scope Chain은 μΌμ’…μ˜ 리슀트둜 μ „μ—­ 객체와 μ€‘μ²©λœ ν•¨μˆ˜μ˜ μŠ€μ½”ν”„μ˜ 레퍼런슀λ₯Ό μ°¨λ‘€λ‘œ μ €μž₯ν•˜κ³  μžˆλ‹€. 즉, μŠ€μ½”ν”„ 체인은 μ „μ—­ 객체( GO) ν˜Ήμ€ ν™œμ„± 객체(AO)의 리슀트λ₯Ό 가리킨닀.

μ°Έμ‘° νŽ˜μ΄μ§€

Last updated

Was this helpful?