๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ต์ฌ) 23์ฅ. ์คํ์ปจํ ์คํธ
์คํ ์ปจํ ์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ ํต์ฌ ๊ฐ๋ ์ด๋ค.
01. ์์ค์ฝ๋์ ํ์
๋ค์ 4๊ฐ์ง ํ์ ์ ์์ค์ฝ๋๋ ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๋ค.
์์ค์ฝ๋์ ํ์ | ์ค๋ช |
์ ์ญ ์ฝ๋ | ์ ์ญ์ ์กด์ฌํ๋ ์์ค์ฝ๋ / ์ ์ญ์ ์ ์๋ ํจ์, ํด๋์ค ๋ฑ์ ๋ด๋ถ ์ฝ๋๋ ํฌํจ X |
ํจ์ ์ฝ๋ | ํจ์ ๋ด๋ถ์ ์กด์ฌํ๋ ์์ค์ฝ๋ / ํจ์ ๋ด๋ถ์ ์ค์ฒฉ๋ ํจ์, ํด๋์ค ๋ฑ์ ๋ด๋ถ ์ฝ๋ ํฌํจ X |
eval ์ฝ๋ | ๋นํธ์ธ ์ ์ญ ํจ์์ธ eval ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ด ์คํ๋๋ ์์ค์ฝ๋ |
๋ชจ๋ ์ฝ๋ | ๋ชจ๋ ๋ด๋ถ์ ์กด์ฌํ๋ ์์ค์ฝ๋ / ๋ชจ๋ ๋ด๋ถ์ ํจ์, ํด๋์ค ๋ฑ์ ๋ด๋ถ ์ฝ๋ ํฌํจ X |
โก๏ธ ์์ค์ฝ๋๋ฅผ 4๊ฐ์ง ํ์ ์ผ๋ก ๊ตฌ๋ถํ๋ ์ด์ : ์์ค์ฝ๋์ ํ์ ์ ๋ฐ๋ผ ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ณผ์ ๊ณผ ๊ด๋ฆฌ ๋ด์ฉ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
02. ์์ค์ฝ๋์ ํ๊ฐ์ ์คํ
๋ชจ๋ ์์ค์ฝ๋๋ ์คํ์ ์์, ํ๊ฐ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํ ์ค๋น๋ฅผ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ "์์ค์ฝ๋์ ํ๊ฐ"์ "์์ค์ฝ๋์ ์คํ" ๊ณผ์ ์ผ๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ค.
03. ์คํ ์ปจํ ์คํธ์ ์ญํ
๋ค์ ์์ ๋ฅผ ์ด๋ป๊ฒ ํ๊ฐํ๊ณ ์คํํ๋์ง ์์๋ณด์.
๐ฅ๏ธ ์์ ์ฝ๋
// ์ ์ญ ๋ณ์ ์ ์ธ
const x = 1;
const y = 2;
// ํจ์ ์ ์
function foo(a) {
// ์ง์ญ ๋ณ์ ์ ์ธ
const x = 10;
const y = 20;
// ๋ฉ์๋ ํธ์ถ
console.log(a + x + y); // 130
}
// ํจ์ ํธ์ถ
foo(100);
// ๋ฉ์๋ ํธ์ถ
console.log(x + y); // 3
1. ์ ์ญ ์ฝ๋ ํ๊ฐ
2. ์ ์ญ ์ฝ๋ ์คํ
3. ํจ์ ์ฝ๋ ํ๊ฐ
4. ํจ์ ์ฝ๋ ์คํ
์ด ๋ชจ๋ ๊ฒ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์คํ ์ปจํ ์คํธ๋ค.
- ์๋ณ์(๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ด๋ฆ)๋ฅผ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ ์ค์ฝํ
- ์ฝ๋ ์คํ ์์ ๊ด๋ฆฌ๋ฅผ ๊ตฌํํ ๋ด๋ถ ๋ฉ์ปค๋์ฆ
- ๋ ์์ปฌ ํ๊ฒฝ์ผ๋ก ๊ด๋ฆฌ - ์๋ณ์, ์ค์ฝํ (๋ ์์ปฌ ํ๊ฒฝ : ์ด๋ค ์ปจํ ์คํธ์์ ์ธ ๋ณ์๋ค์ ์ ์ ???)
- ์คํ ์ปจํ ์คํธ ์คํ์ผ๋ก ๊ด๋ฆฌ - ์ฝ๋ ์คํ ์์
04. ์คํ ์ปจํ ์คํธ ์คํ
๐ก ์คํ ์ปจํ ์คํธ ์คํ์ ์ฝ๋์ ์คํ ์์๋ฅผ ๊ด๋ฆฌํ๋ค.
๐ก ์คํ ์ปจํ ์คํธ ์คํ์ ์ต์์์ ์กด์ฌํ๋ ์คํ ์ปจํ ์คํธ : ์คํ ์ค์ธ ์คํ ์ปจํ ์คํธ
์์ ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด์.
๐ฅ๏ธ ์์ ์ฝ๋
const x = 1;
function foo () {
const y = 2;
function bar () {
const z = 3;
console.log(x + y + z);
}
bar();
}
foo(); // 6
๐ก ์์ฑ๋ ์คํ ์ปจํ ์คํธ๋ ์คํ ์๋ฃ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ๋๋ฉฐ, ์ด๋ฅผ ์คํ ์ปจํ ์คํธ ์คํ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โก๏ธ ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด, ์ฝ๋๊ฐ ์คํ๋๋ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ์คํ ์ปจํ ์คํธ ์คํ์๋ ๋ค์๊ณผ ๊ฐ์ด ์คํ ์ปจํ ์คํธ๊ฐ ์ถ๊ฐ(push)๋๊ณ ์ ๊ฑฐ(pop)๋๋ค.
1. ์ ์ญ ์ฝ๋์ ํ๊ฐ์ ์คํ
2. foo ํจ์ ์ฝ๋์ ํ๊ฐ์ ์คํ
3. bar ํจ์ ์ฝ๋์ ํ๊ฐ์ ์คํ
4. foo ํจ์ ์ฝ๋๋ก ๋ณต๊ท
5. ์ ์ญ ์ฝ๋๋ก ๋ณต๊ท
๊ฒฐ๊ตญ, ์์ ๊ฐ์ด ์คํ ์ปจํ ์คํธ ์คํ์ ์ฝ๋์ ์คํ ์์๋ฅผ ๊ด๋ฆฌ.
05. ๋ ์์ปฌ ํ๊ฒฝ
๐ก ์ค์ฝํ์ ์๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ค.
๐ก ์๋ณ์์ ์๋ณ์์ ๋ฐ์ธ๋ฉ๋ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์์ ์ค์ฝํ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ธฐ๋กํ๋ ์๋ฃ๊ตฌ์กฐ๋ก ์คํ ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ๋ค.
๐ก ํค์ ๊ฐ์ ๊ฐ๋ ๊ฐ์ฒด ํํ์ ์ค์ฝํ(์ ์ญ, ํจ์, ๋ธ๋ก ์ค์ฝํ)๋ฅผ ์์ฑํ์ฌ ์๋ณ์๋ฅผ ํค๋ก ๋ฑ๋กํ๊ณ , ์๋ณ์์ ๋ฐ์ธ๋ฉ๋ ๊ฐ์ ๊ด๋ฆฌํ๋ค.
๋ ์์ปฌ ํ๊ฒฝ์ ๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋๋๋ฐ,
1. ํ๊ฒฝ ๋ ์ฝ๋
2. ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ
-> "์์ ์ค์ฝํ"๋ฅผ ๊ฐ๋ฆฌํด. = "ํด๋น ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ ์์ค์ฝ๋๋ฅผ ํฌํจํ๋ ์์ ์ฝ๋์ ๋ ์์ปฌ ํ๊ฒฝ"์ ๊ฐ๋ฆฌํด.
06. ์คํ ์ปจํ ์คํธ์ ์์ฑ๊ณผ ์๋ณ์ ๊ฒ์ ๊ณผ์
์์ ๋ฅผ ํตํด ์ด๋ป๊ฒ ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋๊ณ ์ฝ๋ ์คํ ๊ฒฐ๊ณผ๊ฐ ๊ด๋ฆฌ๋๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ์คํ ์ปจํ ์คํธ๋ฅผ ํตํด ์๋ณ์๋ฅผ ๊ฒ์ํ๋์ง ์์๋ณด์.
๐ฅ๏ธ ์์ ์ฝ๋
var x = 1;
const y = 2;
function foo (a) {
var x = 3;
const y = 4;
function bar (b) {
const z = 5;
console.log(a + b + x + y + z);
}
bar(10);
}
foo(20); // 42
1. ์ ์ญ ๊ฐ์ฒด ์์ฑ
-> ์ ์ญ ๊ฐ์ฒด์ '๋นํธ์ธ ์ ์ญ ํ๋กํผํฐ', '๋นํธ์ธ ์ ์ญ ํจ์', 'ํ์ค ๋นํธ์ธ ๊ฐ์ฒด' ์ถ๊ฐ
2. ์ ์ญ ์ฝ๋ ํ๊ฐ
1) ์ ์ญ ์คํ ์ปจํ ์คํธ ์์ฑ
2) ์ ์ญ ๋ ์์ปฌ ํ๊ฒฝ ์์ฑ
2.1) ์ ์ญ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
2.1.1) ๊ฐ์ฒด ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
2.1.2) ์ ์ธ์ ํ๊ฒฝ ๋ ์ฝ๋ ์์ฑ
2.2) this ๋ฐ์ธ๋ฉ
2.3) ์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ ๊ฒฐ์
3. ์ ์ญ ์ฝ๋ ์คํ
4. foo ํจ์ ์ฝ๋ ํ๊ฐ
5. foo ํจ์ ์ฝ๋ ์คํ
6. bar ํจ์ ์ฝ๋ ํ๊ฐ
7. bar ํจ์ ์ฝ๋ ์คํ
8. bar ํจ์ ์ฝ๋ ์คํ ์ข ๋ฃ
9. foo ํจ์ ์ฝ๋ ์คํ ์ข ๋ฃ
10. ์ ์ญ ์ฝ๋ ์คํ ์ข ๋ฃ
07. ์คํ ์ปจํ ์คํธ์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ
- var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค๋ก์ง ํจ์์ ์ฝ๋ ๋ธ๋ก๋ง ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅธ๋ค.
- let, const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ชจ๋ ์ฝ๋ ๋ธ๋ก(ํจ์, if ๋ฌธ, for ๋ฌธ, while ๋ฌธ, try/catch ๋ฌธ ๋ฑ)์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅธ๋ค.
๐ฅ๏ธ ์์ ์ฝ๋
let x = 1;
if (true) {
let x = 10;
console.log(x); // 10
}
console.log(x); // 1
โก๏ธ ๋ธ๋ก์ ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ์ง ์๋๋ค.
โก๏ธ ์คํ ์ปจํ ์คํธ๊ฐ ์๋ก ์๊ธฐ๋ ๊ฒ์ด ์๋, ๋ ์์ปฌ ํ๊ฒฝ๋ง ๋ฎ์ด์ฐ๋ ๊ฒ์ด๋ค.
๐ ์ฐธ๊ณ ์๋ฃ