Execution Context
์คํ ์ปจํ ์คํธ๋ ์คํํ ์ฝ๋์ ํ์ํ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๋ปํ๋ค.
์ด๋, OS๋ฅผ ํ์ตํ๋ค๊ฐ ๋ง์ฃผํ๊ฒ ๋๋ ์คํ ๋ฌธ๋งฅ, ์คํ ์ปจํ
์คํธ, ์ต์คํ์
์ปจํ
์คํธ์ ๋ค๋ค ๋์ผํ ๊ฐ๋
์ด๋ค.
์กฐ๊ธ ์ฝ๊ฒ ์ด์ผ๊ธฐ ํ๋ค๋ฉด
์๋ฅผ ๋ค์ด์ ์ฐ๋ฆฌ๊ฐ
var a = 10;
function hello() {
var b = "hello";
return b;
}
์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๋ฉด ์ฌ๊ธฐ์ ์คํ์ ํ์ํ ํ๊ฒฝ ์ ๋ณด๋
var a = 10
๊ณผ hello()
ํจ์์ var b = 'hello'
๊ฐ ์์ ๊ฒ์ด๋ค.
์๋ณ์์ ๋ณ์๋ฑ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์คํ ์ปจํ ์คํธ๋ผ๊ณ ํ๋ค.
์ด๋ฐ ์คํ ์ปจํ ์คํธ๋ ์ฝ ์คํ์ ์ํด ์คํ ํ๊ฒฝ์ ๋ํ ์์๋ฅผ ๋ณด์ฅํ๋๋ฐ, ์์ฐจ์ ์ผ๋ก ์ฝ๋๋ฅผ Interpreting ํ๋ฉด์ ์ฝ์คํ์ ์ถ๊ฐํ๋ค.
๊ทธ ๋ง์ ์ฆ, ์ฝ์คํ์ ๊ฐ์ฅ ์์ ์๋ ๋ถ๋ถ์ด ์ฐ๋ฆฌ๊ฐ ํ์ฌ ์คํํ ์คํ ์ปจํ
์คํธ์์ ์ ์ ์๋ค.
์คํ ์ปจํ ์คํธ๊ฐ ์๊ธฐ๋ ค๋ฉด?
๊ทธ๋ผ ์ด๋ค ์ ๋ณด๋ค์ด ์คํ ์ปจํ ์คํธ๊ฐ ๋ ๊น?
ํ๋์ ์คํ ์ปจํ
์คํธ๋ฅผ ๋ณดํต ์ฐ๋ฆฌ๋ ์ ์ญ ๊ณต๊ฐ, eval()ํจ์, ์ผ๋ฐ ํจ์๋ฅผ ํ๋์ ์คํ ์ปจํ
์คํธ๋ผ๊ณ ํ๋๋ฐ ์ ์ญ ๊ณต๊ฐ๊ณผ eval()
์ ์ฝ๋์ ์คํ์ด ๋๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋์ ์ผ๋ก ๋ง๋ค๊ฒ ๋๋ ๊ฒ์ด๋ค.
ํจ์ ์ปจํ
์คํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ํจ์๋ฅผ ํธ์ถํ๋ค๋ฉด ํจ์์ ๋ํ ์คํ ์ปจํ
์คํธ๊ฐ ์๊ฒผ๋ค๊ณ ๋ณด๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ฒ ๋ ์คํ ์ปจํ
์คํธ๋ ์ผ๋ฐ ํจ์๋ฟ์ด๋ค.
์คํ ์ปจํ ์คํธ๋ฅผ ์ํด js ์์ง์ด ๊ฐ๋ ๊ฐ์ฒด
ํ๋์ ์คํ ์ปจํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํด์๋ js๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์คํ ์ปจํ ์คํธ์ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๊ฐ์ฒด๋ก ์คํ ์ปจํ ์คํธ์ ์ ์ฅํ๋ค.
- variableEnvironment : ํ์ฌ ์ปจํ ์คํธ์ ๋ณ์, ์๋ณ์ ๋ฑ์ ์ต์ด์ ์ํ์ธ ์ค๋ ์ท์ผ๋ก ์ ์ฅํ๋๋ฐ, Lexical์ผ๋ก ์ค๋ ์ท์ ๊ตฌ์ฑํ๋ค.
- LexicalEnvironment : VariableEnvironment์ ๋์ผํ์ง๋ง ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๋ค.
- ThisBinding : ์๋ณ์๊ฐ ๋ฐ๋ผ๋ณด์์ผํ ๋์ ๊ฐ์ฒด๋ฅผ ์ง์ ํ๋ค.
์คํ ์ปจํ ์คํธ๊ฐ ํ์ฑํ ๋๋ค๋ฉด
์คํ ์ปจํ ์คํธ๊ฐ ํ์ฑํ ๋๋ฉด 2๊ฐ์ง ๋จ๊ณ๋ฅผ ๋ง์ดํ๋ค.
- Creation Phase
- Execution Phase
Creatino Phase์ ๋ํด์๋ ์๋์์ ์ด์ผ๊ธฐ ํ ๋ถ๋ถ์ด๊ณ , Execution Phase๋ ์ค์ ๋ก ์คํํ๋ ๋จ๊ณ์ด๋ฏ๋ก ์ถฉ๋ถํ ์ค๋ช ์ด ์๋๋๋ผ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
ํ์ง๋ง Creation Phase๋ ์ดํด๊ฐ ํ์ํ ๋ถ๋ถ์ด ์กฐ๊ธ ์๋ค. ๋ฐ๋ก ๋ค์ด๊ฐ๋ณด์.
ExecutionContextES6 = {
LexicalEnvironment = <ref. to LexicalEnvironment in memory>,
VariableEnvironment = <ref. to VariableEnvironment in memory>,
}
์์์ ThisBinding์ด ์๋ต๋์๋๋ฐ, ES6์์๋ LexicalEnvrionment ๊ณผ์ ์ ํฌํจ๋๋ค.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ LexicalEnvironment
์ ๋ํด์ ์์๋ณด์.
LexicalEnvironment์ ์คํ์ด ๋๋ค๋ฉด 3๊ฐ์ง ์ผ์ ์ํํ๋ค.
- EnvironmentRecord
- ReferenceToTheOuterEnvironment
- ThisBinding
EnvironmentRecord
๋ณ์์ ์๋ณ์, ์ธ์์ ๋ํ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
์ด ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํด๋น ์คํ ์ปจํ
์คํธ์์ ์ฌ์ฉํ๊ฒ๋ ํ๊ฒฝ๋ค์ ๊ตฌ์ฑํ ์ ์๋๋ฐ, ๋ง์น ์ฌ์ ๋ต์ฌ? ๊ฐ์ ๋๋์ด ๋ ๋ค.
ReferenceToTheOuterEnvironment
๋ง์ฝ EnvironmentRecord
์์ ๋ณ์์ ์๋ณ์, ์ธ์์ ๋ํ ์ ๋ณด๋ฅผ ์ฐพ์ง ๋ชปํ ๋, ์์ ์ปจํ
์คํธ์ ์ ๊ทผํด์ ์ฐพ๋ ์ผ์ ์ํํ๋ค.
ThisBinding
์ค์ ๋ก this์ ๊ฐ์ด ๊ฒฐ์ ๋๋ ๋ถ๋ถ์ด๋ค. this์ ๊ดํ ๋ด์ฉ์ ์ด์ผ๊ธฐํ ๋ถ๋ถ์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ค์ ํฌ์คํ ์์ ์์ธํ ๋ค์ด๊ฐ๋ณด์.
์ด๋ ๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ผ๋ถ๋ฅผ ์ฐ๋ฆฌ๋ ์ค๋ ์๊ฒ ๋์๋ค.
์ด๋ฐ ๊ณผ์ ์ด ์ฌ์ค ๊ฐ๋ฐ์ ํ๋๋ฐ์ ์์ด ํฌ๊ฒ ์์ฉํ ๊ฑฐ๋ผ๊ณ ์๊ฐ์ ํ์ง ์์ง๋ง ๊ฐ๋ฐ์๋ก์จ ๋งค์ผ๋งค์ผ ์๋ก์ด ๊ธฐ์ ์ด ํ์ํ๊ณ ๊ธ๋ณํ๋ ์๋์ ์ต์ํ ์ธ์ด๋ก ๊ฐ๋ฐ์ ๋ฅ์ํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์๋ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ, ์๋ก์ด ํ๊ฒฝ์์๋ ๋น ๋ฅด๊ฒ ์ ์ํ๋ ๊ฐ๋ฐ์๊ฐ ๋์ด์ผ ํ๋ค.
๋๊ธ