๐ถ ํจ์๋?
function add(x, y) {
return x + y;
}
add(2, 5); // 7
ํจ์๋ ์ ๋ ฅ์ ๋ฐ์ ์ถ๋ ฅ์ผ๋ก ๋ณํํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ์ ์ํ ์ฝ๋์ ๋๋ค. ํจ์๋ฅผ ํตํด ๋์ผํ ์์ ์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ์ง ์๊ณ ์ฌ์ฌ์ฉํ ์ ์์ด ์ฝ๋์ ํจ์จ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฅ๊ฐ(์ธ์)๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๊ฐ์ผ๋ก ๋ฐํํฉ๋๋ค. ํจ์๋ ์ ์๋๊ธฐ๋ง ํ๊ณ ํธ์ถ๋์ง ์์ผ๋ฉด ์คํ๋์ง ์์ผ๋ฉฐ, ํจ์ ํธ์ถ์ ํตํด ์ค์ ๋ก ๋์ ํฉ๋๋ค.
๐ถ ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ : ๋์ผํ ์์ ์ ๋ฐ๋ณตํด์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ ์ฉ์์ฑ : ์ฝ๋ ์์ ์, ํจ์ ๋ด๋ถ๋ง ์์ ํ๋ฉด ๋์ด ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค.
- ๊ฐ๋ ์ฑ ํฅ์ : ๋ณต์กํ ์ฝ๋๊ฐ ํจ์ํ๋๋ฉด ์ฝ๊ธฐ ์ฝ๊ฒ ๋ฉ๋๋ค.
- ์ ๋ขฐ์ฑ : ์ฝ๋์ ๋์์ ํจ์๋ณ๋ก ๋ช ํํ ์ ์ํ์ฌ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๐ถ ํจ์ ๋ฆฌํฐ๋ด
ํจ์๋ ๊ฐ์ฒด ํ์ ์ ๊ฐ ์ ๋๋ค. ์ฆ, ํจ์๋ ํจ์ ๋ฆฌํฐ๋ด๋ก ์์ฑ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ``function`` ํค์๋์ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก, ํจ์ ๋ชธ์ฒด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํจ์ ๋ฆฌํฐ๋ด๋ก ์์ฑ๋ ํจ์๋ ๊ฐ์ฒ๋ผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ ์ ์์ต๋๋ค.
๐ถ ํจ์ ์ ์
ํจ์ ์ ์๋ ํจ์๊ฐ ์คํ๋ ๋ ํ์ํ ๋งค๊ฐ๋ณ์์ ํจ์ ๋ชธ์ฒด, ๋ฐํ๊ฐ์ ์ค์ ํ๋ ๊ณผ์ ์ ๋๋ค. ํจ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.
- ํจ์ ์ ์ธ๋ฌธ :``function`` ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํฉ๋๋ค.
- ํจ์ ํํ์ : ํจ์ ๋ฆฌํฐ๋ด์ ๋ณ์์ ํ ๋นํ๋ ๋ฐฉ์์ ๋๋ค.
- Function ์์ฑ์ ํจ์ : ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฅ ์์ฑ์ ํจ์์ธ ``Function``์ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ํจ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ํ์ดํ ํจ์ : ES6์์ ๋์ ๋ ๊ฐ๊ฒฐํ ํจ์ ์ ์ ๋ฐฉ์์ ๋๋ค.
ํจ์ ์ ์ธ๋ฌธ
function foo() {
console.log("foo");
}
foo(); // "foo"
ํจ์ ์ ์ธ๋ฌธ์ ํจ์๋ฅผ ์ ์ํ ๋ ์ด๋ฆ์ ๋ฐ๋์ ์ง์ ํด์ผ ํ๋ฉฐ, ์ฝ๋ ์คํ ์ ํจ์ ์ ์ธ์ด ๋จผ์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ์ ์ธ๋ฌธ ์ด์ ์ ํธ์ถํ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ฌต์ ์ผ๋ก ํจ์ ์ด๋ฆ์ ์๋ณ์๋ก ์์ฑํ์ฌ ์ฐธ์กฐํ ์ ์๊ฒ ํฉ๋๋ค.
ํจ์ ํํ์
var foo = function () {
console.log("foo");
}
console.log(foo()); // "foo"
ํจ์๋ ๋ณ์์ ํ ๋นํ ์ ์๋ ๊ฐ์ฒด์ ๋๋ค. ํจ์ ํํ์์์๋ ์ฃผ๋ก ์ต๋ช ํจ์(์ด๋ฆ์ด ์๋ ํจ์)๋ฅผ ์ฌ์ฉํ๋ฉฐ, ํจ์๊ฐ ๋ณ์์ ํ ๋น๋๊ธฐ ๋๋ฌธ์ ํจ์์ ์์ฑ ์์ ์ ๋ณ์ ์ ์ธ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
ํจ์ ์์ฑ ์์ ๊ณผ ํธ์ด์คํ
// ํจ์ ์ฐธ์กฐ
console.dir(add); // f add(x, y)
console.dir(sub); // undefined
// ํจ์ ํธ์ถ
console.log(add(2, 5)); // 7
console.log(sub(2, 5)); // TypeError: sub is not a function
// ํจ์ ์ ์ธ๋ฌธ
function add(x, y) {
return x + y;
}
// ํจ์ ํํ์
var sub = function (x, y) {
return x - y;
}
ํจ์ ์ ์ธ๋ฌธ์ ์ฝ๋ ์คํ ์ ์ ํจ์๊ฐ ์ ์๋๊ณ ํธ์ถํ ์ ์์ง๋ง, ํจ์ ํํ์์ ๋ฐํ์ ์์ ์ ํจ์๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด๋ก ์ธํด ํธ์ด์คํ ์ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค.
ํ์ดํ ํจ์
const foo = () => console.log("foo");
foo(); // "foo"
ํ์ดํ ํจ์๋ ``=>`` ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์ ์ํ๋ ๋ฐฉ์์ผ๋ก, ๋ ๊ฐ๊ฒฐํ ํํ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ดํ ํจ์๋ ์ต๋ช ํจ์๋ก๋ง ์ ์๋ฉ๋๋ค.
๐ถ ํจ์ ํธ์ถ
ํจ์ ํธ์ถ์ ํจ์์ ์ด๋ฆ๊ณผ ์๊ดํธ์ธ ํจ์ ํธ์ถ ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ํธ์ถ๋ฉ๋๋ค. ํจ์๊ฐ ์คํ๋๋ฉด, ์คํ ํ๋ฆ์ ํจ์๋ก ๋์ด๊ฐ๊ณ , ๊ทธ ์์ ์ฝ๋๊ฐ ์คํ๋ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์์ ์ธ์
๋งค๊ฐ๋ณ์๋ ํจ์ ๋ด๋ถ์์ ์ฌ์ฉํ ๋ณ์๋ก, ํจ์๋ฅผ ํธ์ถํ ๋ ์ ๋ฌ๋๋ ๊ฐ์ ์ธ์์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋งค๊ฐ๋ณ์์ ์ธ์๊ฐ ์ผ์นํ๋์ง ๊ฒ์ฌํ์ง ์์ผ๋ฉฐ, ์ธ์๊ฐ ๋ถ์กฑํ๋ฉด ``undefined``๋ฅผ ๋ฐํํ๊ณ , ์ด๊ณผ๋ ์ธ์๋ ๋ฌด์๋ฉ๋๋ค.
๋ฐํ๋ฌธ
``return`` ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์์ ์คํ์ ์ข ๋ฃํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. ``return``์ด ์๋ ๊ฒฝ์ฐ, ํจ์๋ ``undefined``๋ฅผ ๋ฐํํฉ๋๋ค.
๐ถ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ๊ณผ ์ธ๋ถ ์ํ์ ๋ณ๊ฒฝ
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋งค๊ฐ๋ณ์๋ ๊ฐ์ ์ํ ์ ๋ฌ๊ณผ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ ๋ชจ๋ ์ง์ํฉ๋๋ค. ์์ ๊ฐ์ ๊ฐ์ ์ํ ์ ๋ฌ์ด์ง๋ง, ๊ฐ์ฒด๋ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ์ด๋ฏ๋ก ํจ์ ๋ด๋ถ์์ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๐ถ ๋ค์ํ ํจ์์ ํํ
์ฆ์ ์คํ ํจ์
(function () {
var a = 3;
var b = 5;
return a * b;
}());
์ฆ์ ์คํ ํจ์๋ ์ ์๋ ์งํ ๋ฐ๋ก ์คํ๋๋ ํจ์์ ๋๋ค. ์ฃผ๋ก ํ ๋ฒ๋ง ์คํ๋ ์ฝ๋๋ฅผ ํฌํจํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ๊ท ํจ์
function countdown(n) {
if (n < 0) return;
console.log(n);
coundown(n - 1);
}
countdown(10);
์ฌ๊ท ํจ์๋ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์์ ๋๋ค. ๋ฐ๋ณต์ ์ธ ์์ ์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๋ฉฐ, ํ์ถ ์กฐ๊ฑด์ ๋ช ํํ ์ ์ํด์ผ ๋ฌดํ ๋ฃจํ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ค์ฒฉ ํจ์
function outer() {
var x = 1;
function inner() {
var y = 2;
console.log(x + y);
}
inner();
}
outer();
์ค์ฒฉ ํจ์๋ ํจ์ ๋ด๋ถ์ ์ ์๋ ๋ค๋ฅธ ํจ์์ ๋๋ค. ์ค์ฒฉ๋ ํจ์๋ ์ธ๋ถ ํจ์ ๋ด๋ถ์์๋ง ํธ์ถํ ์ ์์ต๋๋ค.
์ฝ๋ฐฑ ํจ์
function repeat(n f) {
for (var i = 0; i < n; i++) {
f(i);
}
}
var logAll = function (i) {
console.log(i);
};
repeat(5, logAll); // 0 1 2 3 4
var logOdds = function (i) {
if (i % 2) console.log(i);
};
repeat(5, logOdds); // 1 3
์ฝ๋ฐฑ ํจ์๋ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ด ํด๋น ํจ์ ๋ด์์ ํธ์ถ๋๋ ํจ์์ ๋๋ค. ์ฝ๋ฐฑ ํจ์๋ ํจ์์ ๋์์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ๋ ์ ์ฉํฉ๋๋ค.
์์ ํจ์์ ๋น์์ ํจ์
์์ ํจ์๋ ์ธ๋ถ ์ํ์ ์์กดํ๊ฑฐ๋ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ, ๋์ผํ ์ธ์์ ๋ํด์๋ ํญ์ ๋์ผํ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๋ถ์ํจ๊ณผ๊ฐ ์๋ ํจ์์ ๋๋ค. ๋น์์ ํจ์๋ ์ธ๋ถ์ํ์ ์์กดํ๊ฑฐ๋ ๊ทธ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์์ ๋๋ค. ์ด๋ฐ ํจ์๋ ํ๋ก๊ทธ๋จ ์์ธก ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ ํจ์์ ๋ถ๋ณ์ฑ์ ์ค์ํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋๋ค. ์ด ๋ฐฉ์์ ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ๋ถ์ํจ๊ณผ๋ฅผ ์ต์ํํ๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ์์ ์ฑ์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
'๐ Jero's Review > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
11์ฅ. ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต (0) | 2025.02.14 |
---|---|
10์ฅ. ๊ฐ์ฒด ๋ฆฌํฐ๋ด (1) | 2025.02.13 |
09์ฅ. ํ์ ๋ณํ๊ณผ ๋จ์ถ ํ๊ฐ (0) | 2025.02.13 |
08์ฅ. ์ ์ด๋ฌธ (0) | 2025.02.12 |
07์ฅ. ์ฐ์ฐ์ (0) | 2025.02.12 |