(์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ) 2. ์คํ ์ปจํ ์คํธ
๐ ๊ธฐ์ ์ฑ ์คํฐ๋
23๋
1์๋ถํฐ ํ๋ ์ค์ธ ๊ต์ก์์, ๋ป์ด ๋ง๋ ๋๋ฃ๋ค๊ณผ ํจ๊ป ์งํํ๊ฒ ๋ ์คํฐ๋
์ฒ์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ
์์ ์ ์ฝ์๊ณ ์ ์ํ๋ฉด์ ์์!
์์ผ๋ก๋ ๊พธ์คํ ๊ธฐ์ ์์ ์ ์ฝ๊ณ ํจ๊ป ๋ฐ์ ํ๋ ์๊ฐ์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค!
์ฑ ์ ์๋ ๋ด์ฉ๋ณด๋จ, ์ฝ์ผ๋ฉด์ ํผ์ ์ ๋ฆฌํ ๋ด์ฉ๋ค ์์ฃผ๋ก ์์ฑํ์!
๐ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ 2. ์คํ ์ปจํ ์คํธ
์ผ์: 1์ 29์ผ 19์
์คํ ์ปจํ ์คํธ
- ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด
- ์คํ ์ปจํ
์คํธ๊ฐ ํ์ฑํ๋๋ ์์ ์ ์ ์ธ๋ ๋ณ์๋ฅผ ์๋ก ๋์ด์ฌ๋ฆฌ๊ณ (
ํธ์ด์คํ
), ์ธ๋ถ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๊ตฌ์ฑํ๊ณ , this ๊ฐ์ ์ค์ ํ๋ ๋ฑ์ ๋์์ ์ํ - ์คํ ์ปจํ ์คํธ ๊ตฌ์ฑ ๋ฐฉ๋ฒ: ์ ์ญ๊ณต๊ฐ, eval() ํจ์, ํจ์
- ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ก์ง
ํจ์ ์คํ
- ์ต์๋จ์ ๊ณต๊ฐ(์ ์ญ๊ณต๊ฐ)์ ์ฝ๋ ๋ด๋ถ์์ ๋ณ๋์ ์คํ์ด ์์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์คํํ์ฌ ์ ์ญ ์ปจํ ์คํธ๋ฅผ ๋ง๋ ๋ค.(anonymous)
- ์ฝ ์คํ์ ๊ฐ์ฅ ์(๋ง์ง๋ง) ์คํ ์ปจํ ์คํธ๊ฐ ์์ด๋ ์๊ฐ์ด ํ์ฌ ์ฝ๋์ ๊ด์ฌํ๊ฒ ๋๋ ์์
- ์คํ ์ปจํ
์คํธ ๊ฐ์ฒด 3ํ์
- VariableEnvironment: ์ด๊ธฐ ํ๊ฒฝ ๊ฐ์ฒด
- environmentRecord: ๋ด๋ถ ํ๊ฒฝ ์ ๋ณด
- outerEnvironmentRecord: ์ธ๋ถ ํ๊ฒฝ ์ ๋ณด
- LexicalEnvironment: ์คํํจ์ ๋ฐ๋ผ ๋ณํ๋ ๊ฐ์ฒด
- environmentRecord: ๋ด๋ถ ํ๊ฒฝ ์ ๋ณด
- outerEnvironmentRecord: ์ธ๋ถ ํ๊ฒฝ ์ ๋ณด
- ThisBinding: this๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- VariableEnvironment: ์ด๊ธฐ ํ๊ฒฝ ๊ฐ์ฒด
Quiz 1) p37. ์ ์ญ๊ณต๊ฐ ๊ด๋ จ ๋ฐ๋ณต๋ฌธ
// 1๋ฒ var
for (var i = 0; i < 5; i++) {
console.log(i);
}
// 2๋ฒ let
for (let i = 0; i < 5; i++) {
console.log(i);
}
// 3๋ฒ const
for (const i = 0; i < 5; i++) {
console.log(i);
}
// 4๋ฒ ์์
for (i = 0; i < 5; i++) {
console.log(i);
}
ํธ์ด์คํ
-
์๋ฐ์คํฌ๋ฆฝํธ์
์คํ ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ ๋ค ์ฝ๋๊ฐ ์คํ๋๋ ๋ ํนํ ๊ตฌ์กฐ
๋๋ถ์ ์๊ธฐ๋ ํ์ -
๋ณ์์ ์ ์ธ๋ถ, ํจ์ ์ ์ฒด(ํจ์ ์ ์ธ๋ฌธ ํ์ )๊ฐ ๋ง์น ์ฝ๋ ์ ์ผ ์์์ ์คํ๋๋ ๋๋
โ ์ด๋ ๊ฒ ์๊ฐํด์ผ ์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ๋ ํด์ ์์๋ฅผ ์ดํดํ ์ ์๋ค.
Quiz 2) p42. ์์ 2-2
function a(x) {
console.log(x); // (1)
var x;
console.log(x); // (2)
var x = 2;
console.log(x); // (3)
}
a(1116);
์ค์ฝํ
- ์๋ณ์์ ๋ํ ์ ํจ๋ฒ์
- ์ฝ๊ฒ ๋งํ๋ฉด
์ด๋ค ๋ณ์๊ฐ ์ํ ์คํ ์ปจํ ์คํธ
๋ผ๊ณ ์๊ฐํด๋ ๋ฌด๋ฐฉ - ์ค์ฝํ ์ฒด์ธ โ ๊ฐ ์คํ ์ปจํ
์คํธ๋ง๋ค
์ ์ธ ๊ธฐ์ค
์์ ์คํ ์ปจํ ์คํธ๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
Quiz 3) p53. ์ค์ฝํ ์ฒด์ธ
function a() {
var answer = 1;
function c() {
console.log(answer);
}
function b() {
var answer = 2;
c();
}
b();
}
a();
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ์คํ
์ผ๋ก ์คํ ์์๋ฅผ ๊ด๋ฆฌํ๊ณ ์คํ ์ปจํ
์คํธ
๋ก ์ค์ฝํ๋ฅผ ๊ด๋ฆฌํ๋ค.
p62 ~ p63) ์ฝ๋๋ก ๊ตฌํํด๋ณด๊ธฐ
function X(a, b) {
const sum = function (a, b) {
return a + b;
}
return sum(a, b);
}
function sum(c, d) {
return `${c} + ${d} = ${c + d}`
}
// X(3, 4) => 7
// sum(3, 4) => '3 + 4 = 7'
// ์ฌ๊ธฐ์ ๋ ๋์๊ฐ์ ์ข๋ ์์ ์ ์ผ๋ก ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ํํ์ ์ฌ์ฉ
const X = (a, b) => {// ...code}
๋ง๋ฌด๋ฆฌ
๊ผญ ์ฐพ์๋ณด๊ณ ์๊ฐํด๋ณด๊ธฐ
1. var, let, const
- ํธ์ด์คํ ๊ณผ ๊ด๋ จ ์ง์ด์ ์ฐพ์๋ณด๊ธฐ
- ์ ์ธ, ์ด๊ธฐํ, ์ฌํ ๋น์ ๊ฐ๋
2. ํจ์ ์ ์ธ๋ฌธ, ํจ์ ํํ์, ํ์ดํ ํจ์ ์ฐจ์ด์
- ํธ์ด์คํ ๊ณผ ๊ด๋ จ ์ง์ด์ ์ฐพ์๋ณด๊ธฐ
- this์ ๊ด๋ จ ์ง์ด์ ์ฐพ์๋ณด๊ธฐ