์ถ์์ ์ธ ๊ฐ๋ , ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด
Stack, Queue
- Stack: LIFO (Last In First Out)
- Queue: FIFO (First In First Out)
- Stack ์์๋ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด์จ d,c,b,a ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ์ ์์ต๋๋ค.
- Queue ์์๋ ์ ์ผ ๋จผ์ ๋ค์ด์จ a,b,c,d ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ์ ์์ต๋๋ค.
์คํ ์ปจํ์คํธ์ ๋์์, ๋์ผํ ํ๊ฒฝ์ ์๋ ์ฝ๋๋ค์ ์คํํ ๋ ํ์ํ ํ๊ฒฝ์ ๋ณด๋ฅผ ๋ชจ์ ์ปจํ
์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ,
์ด๋ฅผ ์ฝ ์คํ์ ์์๋์ ๋ค, ๊ฐ์ฅ ์์ ์๋ ์ปจํ
์คํธ์ ๊ด๋ จ ์๋ ์ฝ๋๋ค์ ์คํํ๋ ๊ฒ์ผ๋ก ์ฝ๋์ ํ๊ฒฝ๊ณผ ์์๋ฅผ ๋ณด์ฅํฉ๋๋ค.
์คํ ์ปจํ ์คํธ์ ๊ตฌ์ฑ ๋ฐฉ๋ฒ
- ์ ์ญ ๊ณต๊ฐ → ์๋ ์คํ
- eval() ํจ์ → ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์
- ํจ์ → ๊ฐ์ฅ ํํ ์คํ ์ปจํ ์คํธ ๊ตฌ์ฑ ๋ฐฉ๋ฒ
- ๋ธ๋ก → { } ๋ก ๋๋ฌ ์์ธ ์ฝ๋ ๋ด๋ถ. ES6 ๋ถํฐ ์ง์
์คํ ์ปจํ ์คํธ์ ์ฝ ์คํ
// ------------------- (1)
var a = 1;
function outer() {
function inner() {
console.log(a);
var a = 3;
// --------------- (2)
}
inner(); // -------- (3)
console.log(a);
// ----------------- (4)
}
outer(); // ---------- (5)
console.log(a);
// ------------------- (6)
- ์คํ ์์ : (1) → (5) → (3) → (2) → (4) → (6)
- ํ๋ก๊ทธ๋จ ์คํ: [์ ์ญ ์ปจํ ์คํธ]
- outer ์คํ: [์ ์ญ ์ปจํ ์คํธ, outer] -> (5)
- inner ์คํ: [์ ์ญ ์ปจํ ์คํธ, outer, inner]-> (3)
- inner ์ข ๋ฃ: [์ ์ญ ์ปจํ ์คํธ, outer] -> (2)
- outer ์ข ๋ฃ: [์ ์ญ ์ปจํ ์คํธ] -> (4)
- ํ๋ก๊ทธ๋จ ์ข ๋ฃ
์คํ ์ปจํ ์คํธ์ ๊ตฌ์กฐ
- ์คํ ์ปจํ ์คํธ ๊ฐ์ฒด๋ ํ์ฑํ๋๋ ์์ ์ VariableEnvironment, LexicalEnviornment, ThisBinding ์ธ ๊ฐ์ง ์ ๋ณด ์์งํฉ๋๋ค.
Variable Environment
- ์คํ ์ปจํ
์คํธ๋ฅผ ์์ฑํ ๋, VariableEnvironment์ ์ ๋ณด๋ฅผ ๋จผ์ ๋ด์ ํ ์ด๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํด์ LexicalEnvironment๋ฅผ ๋ง๋ค๊ณ
์ดํ์ LexicalEnvironment๋ฅผ ์ฃผ๋ก ํ์ฉํ๊ฒ ๋ฉ๋๋ค. ์คํ์ค์๋ ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์๋์ง ์์ผ๋ฉฐ ์ด๊ธฐ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. - ๋ด๋ถ ๊ตฌ์ฑ ์์
- ํ์ฌ ์ปจํ ์คํธ ๋ด์ ์๋ณ์(๋ณ์)๋ค์ ๋ํ ์ ๋ณด
- ์ธ๋ถ ํ๊ฒฝ ์ ๋ณด
- ์ ์ธ ์์ ์ LexicalEnvironment์ ์ค๋ ์ท (๋ณ๊ฒฝ์ฌํญ ๋ฐ์ X)
Lexcial Environment
- LexicalEnvironment์ ๋ด๋ถ์๋ environmentRecord์ outerEnvironmentReference๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- environmentRecord๋ก ์ธํ์ฌ ํธ์ด์คํ ์ด ๋ฐ์
- outerEnvironmentReference๋ก ์ธํ์ฌ ์ค์ฝํ์ ์ค์ฝํ์ฒด์ธ์ด ํ์ฑ
thisBinding
- ์๋ณ์๊ฐ ๋ฐ๋ผ๋ด์ผ ํ ๋์ ๊ฐ์ฒด
์ ๋ฆฌ
- ์คํํ ์ฝ๋ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์ ๋์ ๊ฐ์ฒด์ ๋๋ค.
- ์คํ ์ปจํ ์คํธ ๊ฐ์ฒด๋ ํ์ฑํ ๋๋ ์์ ์ VariableEnvironment, LexicalEnvironment, ThisBinding์ ์ธ ๊ฐ์ง ์ ๋ณด ์์งํฉ๋๋ค.
- VariableEnvironment์ LexicalEnvironment๋ environmentRecord(๋งค๊ฐ ๋ณ์๋ช
, ์๋ณ์, ํจ์๋ช
๋ฑ ์์ง)์
๋ฐ๋ก ์ง์ ์ปจํ ์คํธ์ LexicalEnvironment ์ ๋ณด๋ฅผ ์ฐธ์กฐํ๋ outerEnvironmentReference๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. - ์คํ ์ปจํ ์คํธ ์์ฑํ ๋, VariableEnvironment๋ ์ด๊ธฐ์ํ ์ ์ง, LexicalEnvironment๋ ์คํ ๋์ค ๋ณ๊ฒฝ์ฌํญ ์ฆ์ ๋ฐ์๋ฉ๋๋ค.
์ฐธ๊ณ
'๐ Front-End > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์์ ์ฐจ์ด์ (0) | 2022.11.16 |
---|---|
Hoisting(ํธ์ด์คํ ) (0) | 2022.11.16 |
๋ณ์ ์ ์ธ, ์ด๊ธฐํ, ํ ๋น (0) | 2022.11.16 |
var, let, const (0) | 2022.11.16 |
๋ณ์(variable) (0) | 2022.11.16 |