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