๊ฐ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์์ฑํ์ต๋๋ค
๋ชจ๋ ์ฝ๋๋ ์คํ ์ปจํ
์คํธ
๊ฐ ํ์ฑํ ์ํ์ผ ๋ ์คํ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ค ์คํ ์ปจํ ์คํธ๊ฐ ํ์ฑํ๋๋ ์์ ์
this
๊ฐ์ ์ค์ ํ๋ ๋ฑ์ ๋์์ ์ํํ๋๋ฐ, ์ด๋ก ์ธํด ๋ค๋ฅธ ์ธ์ด์์๋ ๋ฐ๊ฒฌํ ์ ์๋ ํน์ดํ ํ์๋ค์ด ๋ฐ์ํ๋ค.
execution context
์คํํ ์ฝ๋์ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด
call stack
์ ์์์ฌ๋ ค ์ฝ๋์ ํ๊ฒฝ๊ณผ ์์๋ฅผ ๋ณด์ฅํจ{ }
์ ์ํด์๋ ์คํ ์ปจํ
์คํธ๊ฐ ์์ฑ // ------------------- (1)
var a = 1;
function outer() {
function inner() {
console.log(a); // undefined
var a = 3;
}
inner(); // -------- (2)
console.log(a); // 1
}
outer(); // ---------- (3)
console.log(a); // 1
์ ์ฝ๋๋ฅผ ์คํํ๋ ์๊ฐ
(1)์ ์ญ ์ปจํ
์คํธ๊ฐ ์ฝ ์คํ์ ๋ด๊ธด๋ค.
๊ทธ ์ดํ ์ฝ๋๋ค์ ์์ฐจ๋ก ์งํํ๋ค๊ฐ
(3)์์ outer
ํจ์๋ฅผ ํธ์ถํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์
outer
์ ๋ํ ํ๊ฒฝ ์ ๋ณด๋ฅผ ์์งouter ์คํ ์ปจํ
์คํธ
๋ฅผ ์์ฑํ ํ ์ฝ ์คํ์ ๋ด๋๋ค์ด ๋, ์ฝ ์คํ ๋งจ ์์ outer์คํ ์ปจํ ์คํธ๊ฐ ๋์ธ ์ํ์ด๋ฏ๋ก ์ ์ญ ์ปจํ ์คํธ์ ๊ด๋ จ๋ ์ฝ๋์ ์คํ์ ์ผ์ ์ค๋จํ๊ณ outer ์คํ ์ปจํ ์คํธ์ ๊ด๋ จ๋ ์ฝ๋(์ฆ, outerํจ์ ๋ด๋ถ ์ฝ๋)๋ค์ ์์ฐจ๋ก ์คํํ๋ค.
๋ค์ (2)์์ inner
ํจ์์ ์คํ ์ปจํ
์คํธ๊ฐ ์ฝ ์คํ ๊ฐ์ฅ ์์์ ๋ด๊ธฐ๋ฉด outer ์ปจํ
์คํธ์ ๊ด๋ จ๋ ์ฝ๋์ ์คํ์ ์ค๋จํ๊ณ inner ํจ์ ๋ด๋ถ์ ์ฝ๋๋ค์ ์์๋๋ก ์งํํ๋ค.
์ด๋ ๊ฒ ์ด๋ค ์คํ ์ปจํ
์คํธ๊ฐ ํ์ฑํ๋ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํด๋น ์ปจํ
์คํธ์ ๊ด๋ จ๋ ์ฝ๋๋ค์ ์คํํ๋ ๋ฐ ํ์ํ ํ๊ฒฝ ์ ๋ณด๋ค์ ์์งํด์ ์คํ ์ปจํ
์คํธ ๊ฐ์ฒด์ ์ ์ฅํ๋ค.
์ด ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ํ์ฉํ ๋ชฉ์ ์ ์์ฑ๋ ๋ฟ, ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ํตํด ํ์ธ์ ํ ์ ์๋ค.
์ต์ด ์คํ ์์ ์ค๋ ์ท์ ์ ์ง. VariableEnvironment์ ์ ๋ณด๋ฅผ ๋ณต์ฌํด์ LexicalEnvironment๋ฅผ ์์ฑ, ๊ทธ ์ดํ์ LexicalEnvironment๋ฅผ ์ฃผ๋ก ํ์ฉํ๊ฒ ๋๋ค.
VariableEnvironment์ LexicalEnvironment์ ๋ด๋ถ๋ environmentRecord์ outerEnvironmentReference๋ก ๊ตฌ์ฑ๋ผ ์๋ค.
: ์ฒ์์๋ VariableEnvironment์ ๊ฐ์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ด ์ค์๊ฐ์ผ๋ก ๋ฐ์๋๋ค.
์ปจํ ์คํธ ๋ด๋ถ ์ ์ฒด๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์์๋๋ก ์์งํ๋ค.
๋ณ์ ์ ๋ณด๋ฅผ ์์งํ๋ ๊ณผ์ ์ ๋ชจ๋ ๋ง์ณค๋๋ผ๋ ์์ง ์คํ ์ปจํ ์คํธ๊ฐ ๊ด์ฌํ ์ฝ๋๋ค์ ์คํ ์ ์ํ์ธ๋ฐ,
์ฝ๋๊ฐ ์คํ๋์ง ์ ์์๋ ๋ถ๊ตฌํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ฏธ ํด๋น ํ๊ฒฝ์ ์ํ ์ฝ๋์ ๋ณ์๋ช ๋ค์ ๋ชจ๋ ์๊ณ ์๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ํธ์ด์คํ ์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ค.
์ค์ฝํscope?
์๋ณ์์ ๋ํ ์ ํจ๋ฒ์
var
๋ณ์์ ๋ํด์๋ ์์ฉํ์ง ์๊ณ ์๋ก ์๊ธด let
, const
, class
, strict mode์์์ ํจ์ ์ ์ธ
๋ฑ์ ๋ํด์๋ง ์์ฉํ๋ค.์ค์ฝํ ์ฒด์ธ?
์ฌ๋ฌ ์ค์ฝํ์์ ๋์ผํ ์๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ์๋ ๋ฌด์กฐ๊ฑด ์ค์ฝํ ์ฒด์ธ ์์์ ๊ฐ์ฅ ๋จผ์ ๋ฐ๊ฒฌ๋ ์๋ณ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ
this
์๋ณ์๊ฐ ๋ฐ๋ผ๋ด์ผ ํ ๋์ ๊ฐ์ฒดLexicalEnvironment
์ ๋ด๊ธด ๋ณ์์์ ํ ์ฝ๋ ๊ตฌ์ฑ์ ์ํด ๊ฐ๊ธ์ ์ ์ญ๋ฒ์์ ์ฌ์ฉ์ ์ต์ํํ๋ ๊ฒ์ด ์ข๋ค