์คํ ์ปจํ์คํธ๋?
์ฝ ์คํ
- ์คํ ๊ตฌ์กฐ๋ก ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ์คํ ์ปจํ์คํธ๋ฅผ ๋ด๋๋ค
์ฝ ์คํ๊ณผ ์ฝ๋ ์คํ
- ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ ์๊ฐ, ์ ์ญ ์ปจํ์คํธ๊ฐ ์ฝ ์คํ์ ๋ด๊ธด๋ค.
- ํจ์๊ฐ ํธ์ถ๋๋ฉด, JS์์ง์ ํจ์์ ๋ํ ํ๊ฒฝ์ ๋ณด๋ฅผ ์์งํด์ ํจ์๋ฅผ ์ํ ์คํ ์ปจํ์คํธ๋ฅผ ์์ฑํ ํ, ์ฝ ์คํ์ ๋ด๋๋ค
- ์ฝ ์คํ ๋งจ ์์ ํจ์๋ฅผ ์ํ ์คํ ์ปจํ์คํธ๊ฐ ๋์ฌ์ก์ผ๋, ์ ์ญ ์ปจํ์คํธ ์คํ์ ์ผ์ ์ค๋จํ๊ณ ํจ์์ ์คํ ์ปจํ์คํธ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์์ฐจ ์คํํ๋ค.
- ํจ์ ์คํ์ด ์ข
๋ฃ๋๋ฉด, ์ฝ ์คํ์์ ํด๋น ํจ์์ ์คํ ์ปจํ์คํธ๊ฐ ์ ๊ฑฐ๋๋ค
ํ ์์ ์์ ์ฝ ์คํ ๋งจ์์ ์๋ ์คํ ์ปจํ์คํธ, ์ฆ ์คํ์ ์ค๋จํ๋ ์ฝ๋๋ถํฐ ์คํ์ ์ฌ๊ฐํ๋ค. - ์ ์ญ ๊ณต๊ฐ์ ์ฝ๋๋ ์ ๋ถ ์คํ๋์ด ๋ ์ด์ ์คํํ ์ฝ๋๊ฐ ๋จ์ ์์ง ์๊ฒ ๋๋ฉด, ์ ์ญ ์ปจํ์คํธ๋ ์ฝ ์คํ์์ ์ ๊ฑฐ๋๋ค.
์คํ ์ปจํ์คํธ์ ๋ด๊ธฐ๋ ์ ๋ณด
- ์คํ ์ปจํ์คํธ๊ฐ ํ์ฑํ ๋ ๋, JS ์์ง์ ํด๋น ์ปจํ์คํธ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์คํํ๋๋ฐ ํ์ํ ํ๊ฒฝ ์ ๋ณด๋ฅผ ์์งํด์ ์คํ ์ปจํ์คํธ ๊ฐ์ฒด์ ์ ์ฅํ๋ค.
- ์์งํ๋ ์ ๋ณด๋ ์๋์ ๊ฐ๋ค.
์ด๋ฆ ์ค๋ช VariableEnvironment ํ์ฌ ์ปจํ์คํธ ๋ด์ ์๋ณ์์ ๋ํ ์ ๋ณด์ ์ธ๋ถ ํ๊ฒฝ ์ ๋ณด. ์ ์ธ ์์ ์ LexicalEnvironment์ ์ค๋ ์ท์ผ๋ก, ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์๋์ง ์๋๋ค LexicalEnvironment ์ฒ์์๋ VariableEnvironment์ ๊ฐ์ง๋ง, ๋ณ๊ฒฝ ์ฌํญ์ด ์ค์๊ฐ์ผ๋ก ๋ฐ์๋๋ค๋ ์ฐจ์ด๊ฐ ์๋ค ThisBinding this ์๋ณ์๊ฐ ๋ฐ๋ผ๋ด์ผ ํ ๋์ ๊ฐ์ฒด
VariableEnvironment์ LexicalEnvironment
- ๋ ๋ค ๋ด๋ถ๋ environmentRecord์ outerEnvironmentReference๋ก ๊ตฌ์ฑ๋๋ค
- ์ด๊ธฐํ ์์ ์ ๋์ด ์ฌ์ค์ ๋์ผํ์ง๋ง, ์ฝ๋ ์งํ์ ๋ฐ๋ผ ์๋ก ๋ฌ๋ผ์ง๊ฒ ๋๋ค
LexicalEnvironment
- ํ๊ตญ์ด๋ก ๋ฒ์ญํ๋ฉด ์ด์ํด์ง๋๋ฐ, ๊ทธ๋ฅ ์ฌ์ ์ ์ธ ํ๊ฒฝ์ ๋ณด๋ผ๊ณ ์๊ฐํ์
- ํ์ฌ ์ปจํ์คํธ์ ~๋ผ๋ ์๋ณ์๊ฐ ์๊ณ , ์ธ๋ถ์ ๋ณด๋ ~๋ฅผ ์ฐธ์กฐํ๋๋ก ๊ตฌ์ฑ๋์ด์๋ค๋ผ๋, ์ปจํ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ ํ๊ฒฝ ์ ๋ณด๋ฅผ ์ฌ์ ์์ ์ ํ๋ ๋๋์ผ๋ก ๋ชจ์๋์ ๊ฒ์ด ๋ฐ๋ก LexicalEnvironment์ด๋ค.
- ๋ค๋ง, ์ฌ์ ์ ์ธ ์ด๋ผ๋ ์๋ฏธ๋ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ๊ฒ์ด๋๊น, ๋ค๋ฅธ ์ฌ๋๋ค์ด๋ ์๊ธฐํ ๋ LexicalEnvironment์ด๋ผ๊ณ ์๋ฌธ ๊ทธ๋๋ก ๋ถ๋ฅด๋๋ก ํ์
์คํ ์ปจํ์คํธ ์์ฝ
- JS์ฝ๋ ์ต์ด ์คํ ์ ์ฝ ์คํ์ ์ ์ญ ์ปจํ์คํธ๊ฐ ์์ด๊ณ , ํจ์ ํธ์ถ์ ์ด๋ฅผ ์ํ ์๋ก์ด ์คํ ์ปจํ์คํธ๊ฐ ์์ฑ๋์ด ์์ธ๋ค.
- ์คํ์ด ๋๋ ์คํ ์ปจํ์คํธ๋ ์ฝ ์คํ์์ ์ ๊ฑฐ๋๊ณ , ๊ฐ์ฅ ์๋จ์ ์๋ ์คํ ์ปจํ์คํธ์ ์คํ์ด ์ฌ๊ฐ๋๋ค.
- ์ฝ ์คํ์ ์คํ ์ปจํ์คํธ๊ฐ ํ๋๋ ๋จ์ ์์ง ์๊ฒ ๋๋ฉด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ค
- ์คํ ์ปจํ์คํธ์ VariableEnvironment, LexicalEnvironment, ThisBinding์ด ๋ด๊ธด๋ค.