12์ฅ ํจ์
ํจ์๋?
ํจ์๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋ฌธ์ผ๋ก ๊ตฌํํ๊ณ ์ฝ๋ ๋ธ๋ก์ผ๋ก ๊ฐ์ธ์ ํ๋์ ์คํ ๋จ์๋ก ์ ์ํ ๊ฒ์ด๋ค.
์ ๋ ฅ์ ๋ฐ์์ ์ถ๋ ฅ์ ๋ด๋ณด๋ด๋ ์ผ๋ จ์ ๊ณผ์ ์ด๋ผ๊ณ ๋ ํ ์์๋ค. ์ด๋ ํจ์ ๋ด๋ถ๋ก ์ ๋ ฅ์ ์ ๋ฌ๋ฐ๋ ๋ณ์๋ฅผ ๋งค๊ฐ ๋ณ์(parameter), ์ ๋ ฅ์ ์ธ์(argument), ์ถ๋ ฅ์ ๋ฐํ๊ฐ(return value)์ด๋ผ ํ๋ค.
ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์ฝ๋์ ์ฌ์ฌ์ฉ : ํจ์๋ ํ์ํ ๋ ์ฌ๋ฌ ๋ฒ ํธ์ถํ ์ ์๋ค .์ฆ ์คํ ์์ ์ ๊ฐ๋ฐ์๊ฐ ๊ฒฐ์ ํ ์ ์๊ณ ๋ช ๋ฒ์ด๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์ฝ๋์ ์ ๋ขฐ์ฑ : ์ฝ๋์ ์ค๋ณต์ ์ต์ ํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ํจ์๋ ์ ์ง๋ณด์์ ํธ์์ฑ์ ๋์ด๊ณ ์ฝ๋์ ์ ๋ขฐ์ฑ์ ๋์ด๋ ํจ๊ณผ๊ฐ ์๋ค.
- ์ฝ๋์ ๊ฐ๋ ์ฑ : ์ ์ ํ ํจ์ ์ด๋ฆ์ ํจ์์ ๋ด๋ถ ์ฝ๋๋ฅผ ์ดํดํ์ง ์๊ณ ๋ ํจ์์ ์ญํ ์ ํ์ ํ ์ ์๊ฒ ๋๋๋ค.
ํจ์ ๋ฆฌํฐ๋ด
ํจ์๋ ํจ์ ๋ฆฌํฐ๋ด๋ก ์์ฑํ ์ ์๋ค.
ํจ์๋ ๊ฐ์ฒด์ง๋ง ์ผ๋ฐ ๊ฐ์ฒด์๋ ๋ค๋ฅด๋ค. ์ผ๋ฐ ๊ฐ์ฒด๋ ํธ์ถํ ์ ์์ง๋ง ํจ์๋ ํธ์ถํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด์๋ ์๋ ํจ์ ๊ฐ์ฒด๋ง์ ๊ณ ์ ํ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค.
ํจ์ ๋ฆฌํฐ๋ด์ ํจ์ ์ด๋ฆ์ ์๋ตํ ์ ์๋ค. ์ด๋ฌํ ํจ์๋ฅผ ์ต๋ช ํจ์๋ผ ํ๋ค.
var f = function add(x, y) {
return x + y;
}
ํจ์ ์ ์
๋ณ์ ์ ์ธ๊ณผ ํจ์ ์ ์
๋ณ์๋ '์ ์ธ'ํ๋ค๊ณ ํ์ง๋ง ํจ์๋ '์ ์'ํ๋ค๊ณ ํํํ๋ค. ํจ์ ์ ์ธ๋ฌธ์ด ํ๊ฐ๋๋ฉด ์๋ณ์๊ฐ ์๋ฌต์ ์ผ๋ก ์์ฑ๋๊ณ ํจ์ ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ค. ๋ฐ๋ผ์ ECMAScript ์ฌ์์์๋ ๋ณ์์๋ ์ ์ธ, ํจ์์๋ ์ ์๋ผ๊ณ ํํํ๋ค.
- ํจ์ ์ ์ธ๋ฌธ
- ํจ์ ์ ์ธ๋ฌธ์ ํํ์์ด ์๋ ๋ฌธ์ด๋ฏ๋ก ๋ณ์์ ํ ๋นํ ์ ์๋ค. ํ์ง๋ง ํจ์ ์ ์ธ๋ฌธ์ด ๋ณ์์ ํ ๋น๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ๋์ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ๋์ผํ ํจ์ ๋ฆฌํฐ๋ด์ ํํ์์ด ์๋ ๋ฌธ์ธ ํจ์ ์ ์ธ๋ฌธ์ผ๋ก ํด์ํ๋ ๊ฒฝ์ฐ์ ํํ์์ธ ๋ฌธ์ธ ํจ์ ๋ฆฌํฐ๋ด ํํ์์ผ๋ก ํด์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ํจ์๋ ํจ์ ์ด๋ฆ์ผ๋ก ํธ์ถํ๋ ๊ฒ์ด ์๋๋ผ ํจ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ก ํธ์ถํ๋ค.
function add(x, y) {
return x + y;
}
- ํจ์ ํํ์
- ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ๊ฐ์ฒ๋ผ ๋ณ์์ ํ ๋นํ ์๋ ์๊ณ ํ๋กํผํฐ ๊ฐ์ด ๋ ์๋ ์์ผ๋ฉฐ ๋ฐฐ์ด์ ์์๊ฐ ๋ ์๋ ์๋ค. ์ด์ฒ๋ผ ๊ฐ์ ์ฑ์ง์ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ผ ํ๋ค.
- ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ฏ๋ก ํจ์ ๋ฆฌํฐ๋ด๋ก ์์ฑํ ํจ์ ๊ฐ์ฒด๋ฅผ ๋ณ์์ ํ ๋นํ ์ ์๋ค. ์ด๋ฌํ ํจ์ ์ ์ ๋ฐฉ์์ ํจ์ ํํ์์ด๋ผ ํ๋ค.
var add = function(x, y) {
return x + y;
}
- ํจ์ ์์ฑ ์์ ๊ณผ ํจ์ ํธ์ด์คํ
- ํจ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ ์ ํน์ง์ ํจ์ ํธ์ด์คํ ์ด๋ผ ํ๋ค.
- ๋ณ์ ์ ์ธ์ ๋ฐํ์ ์ด์ ์ ์คํ๋์ด indefined๋ก ์ด๊ธฐํ๋์ง๋ง ๋ณ์ ํ ๋น๋ฌธ์ ๊ฐ์ ํ ๋น๋ฌธ์ด ์คํ๋๋ ์์ , ์ฆ ๋ฐํ์์ ํ๊ฐ๋๋ฏ๋ก ํจ์ ํํ์์ ํจ์ ๋ฆฌํฐ๋ด๋ ํ ๋น๋ฌธ์ด ์คํ๋๋ ์์ ์ ํ๊ฐ๋์ด ํจ์ ๊ฐ์ฒด๊ฐ ๋๋ค. ๋ฐ๋ผ์ ํจ์ ํํ์์ผ๋ก ํจ์๋ฅผ ์ ์ํ๋ฉด ํจ์ ํธ์ด์คํ ์ด ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ผ ๋ณ์ ํธ์ด์คํ ์ด ๋ฐ์ํ๋ค.
- Function ์์ฑ์ ํจ์
- Function ์์ฑ์ ํจ์๋ก ํจ์๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ ์ผ๋ฐ์ ์ด์ง ์์ผ๋ฉฐ ๋ฐ๋์งํ์ง๋ ์๋ค. Function ์์ฑ์ ํจ์๋ก ์์ฑํ ํจ์๋ ํด๋ก์ ๋ฅผ ์์ฑํ์ง ์๋ ๋ฑ, ํจ์ ์ ์ธ๋ฌธ์ด๋ ํจ์ ํํ์์ผ๋ก ์์ฑํ ํจ์์ ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
var add = new Function('x', 'y', 'return x + y');
์์ฑ์ ํจ์
์์ฑ์ ํจ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ๋งํ๋ค.
- ํ์ดํ ํจ์
- ES6์์ ๋์ ๋ ํ์ดํ ํจ์๋ function ํค์๋ ๋์ ํ์ดํ(=>)๋ฅผ ์ฌ์ฉํด ์ข ๋ ๊ฐ๋ตํ ๋ฐฉ๋ฒ์ผ๋ก ํจ์๋ฅผ ์ ์ธํ ์ ์๋ค. ํ์ดํ ํจ์๋ ํญ์ ์ต๋ช ํจ์๋ก ์ ์ํ๋ค.
- ํ์ดํ ํจ์๋ ์์ฑ์ ํจ์๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ธฐ์กด ํจ์์ [ic]this[/ic] ๋ฐ์ธ๋ฉ ๋ฐฉ์์ด ๋ค๋ฅด๊ณ [ic]prototype[/ic] ํ๋กํผํฐ๊ฐ ์์ผ๋ฉด [ic]arguments[/ic] ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๋๋ค.
const add = (x, y) => x + y;
ํจ์ ํธ์ถ
ํจ์๋ฅผ ํธ์ถํ๋ฉด ํ์ฌ์ ์คํ ํ๋ฆ์ ์ค๋จํ๊ณ ํธ์ถ๋ ํจ์๋ก ์คํ ํ๋ฆ์ ์ฎ๊ธด๋ค. ์ด๋ ๋งค๊ฐ๋ณ์์ ์ธ์๊ฐ ์์๋๋ก ํ ๋น๋๊ณ ํจ์ ๋ชธ์ฒด์ ๋ฌธ๋ค์ด ์คํ๋๊ธฐ ์์ํ๋ค.
- ๋งค๊ฐ๋ณ์์ ์ธ์
- ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ๊ฐ์ ํจ์ ์ธ๋ถ์์ ํจ์ ๋ด๋ถ๋ก ์ ๋ฌํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ, ๋งค๊ฐ๋ณ์(์ธ์)๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํ๋ค.
- ํจ์๊ฐ ํธ์ถ๋๋ฉด ํจ์ ๋ชธ์ฒด ๋ด์์ ์๋ฌต์ ์ผ๋ก ๋งค๊ฐ๋ณ์๊ฐ ์์ฑ๋๊ณ ์ผ๋ฐ ๋ณ์์ ๋ง์ฐฌ๊ฐ์ง๋ก indefined๋ก ์ด๊ธฐํ๋ ์ดํ ์ธ์๊ฐ ์์๋๋ก ํ ๋น๋๋ค. ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ๋งค๊ฐ๋ณ์๋ ์ด์ ๊ฐ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
- ํจ์๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์์ ์ธ์์ ๊ฐ์๊ฐ ์ผ์นํ์ง ์์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ์ธ์๊ฐ ํ ๋น๋์ง ์๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ undefined๋ค. ๋งค๊ฐ๋ณ์๋ณด๋ค ์ธ์๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ ์ด๊ณผ๋ ์ธ์๋ ๋ฌด์๋๊ณ ์๋ฌต์ ์ผ๋ก arguments ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๋ณด๊ด๋๋ค.
function add(x, y) {
return x + y;
}
add(2, 5);
- ์ธ์ ํ์ธ
- ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ๋งค๊ฐ๋ณ์์ ์ธ์์ ๊ฐ์๊ฐ ์ผ์นํ๋์ง ํ์ธํ์ง ์๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ ์ธ์ด๋ค. ๋ฐ๋ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ๋งค๊ฐ๋ณ์์ ํ์ ์ ์ฌ์ ์ ์ง์ ํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ ํจ์๋ฅผ ์ ์ํ ๋ ์ ์ ํ ์ธ์๊ฐ ์ ๋ฌ๋์๋์ง ํ์ธํ ํ์๊ฐ ์๋ค.
function add1(x, y) {
// ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ๋ฌ๋ ์ธ์์ ํ์
์ด ๋ถ์ ์ ํ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ
if (typeof x !== 'number' || typeof y !== 'number') {
throw new TypeError('์ธ์๋ ๋ชจ๋ ์ซ์ ๊ฐ์ด์ด์ผ ํฉ๋๋ค.');
}
return x + y;
}
function add2(a, b) {
// ๋จ์ถ ํ๊ฐ๋ฅผ ์ฌ์ฉํด ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ
a = a || 0;
b = b || 0;
return a + b;
}
// ES6์์ ๋์
๋ ๋งค๊ฐ๋ณ์ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
function add3(a = 0, b = 0) {
return a + b + c;
}
- ๋งค๊ฐ๋ณ์์ ์ต๋ ๊ฐ์
- ECMAScript ์ฌ์์์๋ ๋งค๊ฐ๋ณ์์ ์ต๋ ๊ฐ์์ ๋ํด ๋ช ์์ ์ผ๋ก ์ ํํ๊ณ ์์ง ์๋ค.
- ๋งค๊ฐ๋ณ์๋ ์์์ ์๋ฏธ๊ฐ ์๋ค. ๋งค๊ฐ๋ณ์์ ๊ฐ์๊ฐ ๋ง๋ค๋ ๊ฒ์ ํจ์๊ฐ ์ฌ๋ฌ ๊ฐ์ง ์ผ์ ํ๋ค๋ ์ฆ๊ฑฐ์ด๋ฏ๋ก ๋ฐ๋์งํ์ง ์๋ค. ์ด์์ ์ธ ํจ์๋ ํ ๊ฐ์ง ์ผ๋ง ํด์ผ ํ๋ฉฐ ๊ฐ๊ธ์ ์๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
- ๋ฐํ๋ฌธ
- ํจ์๋ [ic]return[/ic] ํค์๋์ ํํ์(๋ฐํ์)์ผ๋ก ์ด๋ค์ง ๋ฐํ๋ฌธ์ ์ฌ์ฉํด ์คํ ๊ฒฐ๊ณผ๋ฅผ ํจ์ ์ธ๋ถ๋ก ๋ฐํ ํ ์ ์๋ค.
- ํจ์ ํธ์ถ์ ํํ์์ด๋ค. ํจ์ ํธ์ถ ํํ์์ [ic]return[/ic] ํค์๋๊ฐ ๋ฐํํ ํํ์์ ํ๊ฐ ๊ฒฐ๊ณผ, ์ฆ ๋ฐํ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค.
- ๋ฐํ๋ฌธ์ ํจ์์ ์คํ์ ์ค๋จํ๊ณ ํจ์ ๋ชธ์ฒด๋ฅผ ๋น ์ ธ๋๊ฐ๋ค.
- ๋ฐํ๋ฌธ์ [ic]return[/ic] ํค์๋ ๋ค์ ์ค๋ ํํ์์ ํ๊ฐํด ๋ฐํํ๋ค. [ic]return[/ic] ํค์๋ ๋ค์ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ํํ์์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ง ์์ผ๋ฉด undefined๊ฐ ๋ฐํ๋๋ค.
- ๋ฐํ๋ฌธ์ ์๋ตํ ์ ์๋ค.
- [ic]return[/ic] ํค์๋์ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ํํ์ ์ฌ์ด์ ์ค๋ฐ๊ฟ์ด ์์ผ๋ฉด ์ธ๋ฏธ์ฝ๋ก ์ด ์๋ ์ถ๊ฐ๋์ด ์๋์น ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ฐธ์กฐ์ ์ํ ์ ๋ฌ๊ณผ ์ธ๋ถ ์ํ์ ๋ณ๊ฒฝ
๊ฐ์ฒด ํ์ ์ธ์๋ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ๋งค๊ฐ๋ณ์์ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ํจ์ ๋ชธ์ฒด์์ ์ฐธ์กฐ ๊ฐ์ ํตํด ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ์๋ณธ์ด ํผ์๋๋ค. ์ด๋ ์ฝ๋์ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๊ณ ๊ฐ๋ ์ฑ์ ํด์น๋ ์์ธ์ด ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ค ํ๋๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ณ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๊ฐ์ฒด์ ์ํ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ๊น์ ๋ณต์ฌ๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฌํ ๋น์ ํตํด ๊ต์ฒดํ๋ค.
์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ธ๋ถ ์ํ์ ์์กด๋ ํ์ง ์๋ ํจ์๋ฅผ ์์ํจ์๋ผ ํ๋ค. ์์ ํจ์๋ฅผ ํตํด ๋ถ์ํจ๊ณผ๋ฅผ ์ต๋ํ ์ต์ ํ์ฌ ์ค๋ฅ๋ฅผ ํผํ๊ณ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๋ ค๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ ํ๋ค.
// ๋งค๊ฐ๋ณ์ primitive๋ ์์ ๊ฐ์ ์ ๋ฌ๋ฐ๊ณ , ๋งค๊ฐ๋ณ์ obj๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.
function changeVal(primitive, obj) {
primitive += 100;
obj.name = 'Kim';
}
var num = 100;
var person = {name: 'Lee'};
// ์์ ๊ฐ์ ๊ฐ ์์ฒด๊ฐ ๋ณต์ฌ๋์ด ์ ๋ฌ๋๊ณ ๊ฐ์ฒด๋ ์ฐธ์กฐ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค.
changeVal(num, person);
// ์์ ๊ฐ์ ์๋ณธ์ด ํผ์๋์ง ์๋๋ค.
console.log(num); // 100
// ๊ฐ์ฒด๋ ์๋ณธ์ด ํผ์๋๋ค.
console.log(person); // {name: 'Kim'};
๋ค์ํ ํจ์์ ํํ
- ์ฆ์ ์คํ ํจ์
ํจ์ ์ ์์ ๋์์ ์ฆ์ ํธ์ถ๋๋ ํจ์๋ฅผ ์ฆ์ ์คํ ํจ์๋ผ๊ณ ํ๋ค. ์ฆ์ ์คํ ํจ์๋ ๋จ ํ ๋ฒ๋ง ํธ์ถ๋๋ฉฐ ๋ค์ ํธ์ถ๋๋ฉฐ ๋ค์ ํธ์ถํ ์ ์๋ค.
์ฆ์ ์คํ ํจ์ ๋ด์ ์ฝ๋๋ฅผ ๋ชจ์ ๋๋ฉด ํน์ ์์ ์๋ ์๋ ๋ณ์๋ ํจ์ ์ด๋ฆ์ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์๋ค.
(functuin () {
var a = 3;
var b = 2;
returen a + b;
})();
- ์ฌ๊ท ํจ์
์ฌ๊ท ํจ์๋ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํ์, ์ฆ ์ฌ๊ท ํธ์ถ์ ์ํํ๋ ํจ์๋ฅผ ๋งํ๋ค. ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต๋๋ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณต๋ฌธ ์์ด ๊ตฌํํ ์ ์๋ค.
์ฌ๊ท ํจ์๋ ์์ ์ ๋ฌดํ ์ฌ๊ท ํธ์ถํ๋ค. ๋ฐ๋ผ์ ์ฌ๊ท ํจ์ ๋ด์๋ ์ฌ๊ท ํธ์ถ์ ๋ฉ์ถ ์ ์๋ ํ์ถ ์กฐ๊ฑด์ ๋ฐ๋์ ๋ง๋ค์ด์ผ ํ๋ค.
// ๋ฐ๋ณต๋ฌธ
function countdown1(n) {
for (var i = n; i >= 0; i--) console.log(i)
}
// ์ฌ๊ท ํจ์
function countdown2(n) {
if (n < 0) return;
conuntdown2(n - 1);
}
- ์ค์ฒฉ ํจ์
ํจ์ ๋ด๋ถ์ ์ ์๋ ํจ์๋ฅผ ์ค์ฒจ ํจ์ ๋๋ ๋ด๋ถ ํจ์๋ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ฒฉ ํจ์๋ฅผ ํฌํจํ๋ ํจ์๋ ์ธ๋ถ ํจ์๋ผ ๋ถ๋ฅธ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์คํํจ์๋ ์์ ์ ํฌํจํ๋ ์ธ๋ถ ํจ์๋ฅผ ๋๋ ํฌํผ ํจ์์ ์ญํ ์ ํ๋ค.
function outer() {
var x = 1;
// ์ค์ฒฉ ํจ์
function inner() {
var y = 2;
// ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
console.log(x + y); // 3
}
inner();
}
outer();
- ์ฝ๋ฐฑ ํจ์
ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋ค๋ฅธ ํจ์์ ๋ด๋ถ๋ก ์ ๋ฌ๋๋ ํจ์๋ฅผ ์ฝ๋ฐฑ ํจ์๋ผ๊ณ ํ๋ฉฐ, ๋งค๊ฐ ๋ณ์๋ฅผ ํตํด ํจ์์ ์ธ๋ถ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ๊ณ ์ฐจ ํจ์๋ผ๊ณ ํ๋ค.
๊ณ ์ฐจ ํจ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ ์ฝ๋ฐฑ ํจ์์ ํธ์ถ ์์ ์ ๊ฒฐ์ ํด์ ํธ์ถํ๋ค. ๋ค์ ๋งํด, ์ฝ๋ฐฑ ํจ์๋ ๊ณ ์ฐจ ํจ์์ ์ํด ํธ์ถ๋๋ฉฐ ์ด๋ ๊ณ ์ฐจ ํจ์๋ ํ์์ ๋ฐ๋ผ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ณ ์ฐจ ํจ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ์ง ์๊ณ ํจ์ ์์ฒด๋ฅผ ์ ๋ฌํด์ผ ํ๋ค.
์ฝ๋ฐฑ ํจ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์๋ฟ๋ง ์๋๋ผ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ํ์ฉ๋๋ ์ค์ํ ํจํด์ด๋ค.
// ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ ์ด๋ฒคํธ ์ฒ๋ฆฌ
document.getEelementById('myButton').addEventListener('click', function() {});
// ์ธ๋ถ์์ ์ ๋ฌ๋ฐ์ f๋ฅผ n๋งํผ ๋ฐ๋ณต ํธ์ถํ๋ค.
fuction repeat(n, f) {
for (var i = 0; i < n; i++) f(i);
}
var logAll = function(i) {
console.log(i);
}
repeat(5, logAll)
- ์์ ํจ์์ ๋น์์ ํจ์
์์ ํจ์๋ ๋์ผํ ์ธ์๊ฐ ์ ๋ฌ๋๋ฉด ์ธ์ ๋ ๋์ผํ ๊ฐ์ ๋ฐํํ๋ ํจ์๋ค.
๋น์์ ํจ์๋ ์ธ๋ถ ์ํ์ ๋ฐ๋ผ ๋ฐํ๊ฐ์ด ๋ฌ๋ผ์ง๋ ํจ์๋ค. ํจ์์ ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ถ์ ํจ๊ณผ๊ฐ ์๋ค.
var count = 0;
// ์์ ํจ์
function increase1(n) {
return ++n;
}
count = increse1(count);
// ๋น์์ ํจ์
function increase2(n) {
return ++count;
}
increase2();
13์ฅ ์ค์ฝํ
์ค์ฝํ๋?
๋ชจ๋ ์๋ณ์๋ ์์ ์ด ์ ์ธ๋ ์์น์ ์ํด ๋ค๋ฅธ ์ฝ๋๊ฐ ์๋ณ์ ์์ ์ ์ฐธ์กฐํ ์ ์๋ ์ ํจ ๋ฒ์๊ฐ ๊ฒฐ์ ๋๋ค. ์ด๋ฅผ ์ค์ฝํ๋ผ ํ๋ค. ์ฆ ์ค์ฝํ๋ ์๋ณ์๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ๋งํ๋ค.
์ฝ๋์ ๋ฐ๊นฅ ์์ญ๊ณผ ํจ์ ๋ด๋ถ์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ๋ ๋ณ์๊ฐ ์์ผ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ ๊ฐ์ ๋ณ์ ์ค์์ ์ด๋ค ๋ณ์๋ฅผ ์ฐธ์กฐํด์ผ ํ ๊ฒ์ธ์ง ๋ฅผ ๊ฒฐ์ ํ๋ค. ์ด๋ฅผ ์๋ณ์ ๊ฒฐ์ ์ด๋ผ ํ๋ค. ์ค์ฝํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ณ์๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉํ๋ ๊ท์น์ด๋ผ๊ณ ๋ ํ ์ ์๋ค.
[ic]var[/ic] ํค์๋๋ก ์ ์ธํ ๋ณ์์ ์ค๋ณต ์ ์ธ
[ic]var[/ic] ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ๊ฐ์ ์ค์ฝํ ๋ด์์ ์ค๋ณต ์ ์ธ์ด ํ์ฉ๋๋ค. ์ด๋ ์๋์น ์๊ฒ ๋ณ์๊ฐ์ด ์ฌํ ๋น๋์ด ๋ณ๊ฒฝ๋๋ ๋ถ์์ฉ์ ๋ฐ์์ํจ๋ค. ํ์ง๋ง [ic]let[/ic]์ด๋ [ic]const[/ic] ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ๊ฐ์ ์ค์ฝํ ๋ด์์ ์ค๋ณต ์ ์ธ์ ํ์ฉํ์ง ์๋๋ค.
์ค์ฝํ์ ์ข ๋ฅ
๊ตฌ๋ถ | ์ค๋ช | ์ค์ฝํ | ๋ณ์ |
์ ์ญ | ์ฝ๋์ ๊ฐ์ฅ ๋ฐ๊นฅ ์์ญ | ์ ์ญ ์ค์ฝํ | ์ ์ญ ๋ณ์ |
์ง์ญ | ํจ์ ๋ชธ์ฒด ๋ด๋ถ | ์ง์ญ ์ค์ฝํ | ์ง์ญ ๋ณ์ |
- ์ ์ญ๊ณผ ์ ์ญ ์ค์ฝํ
์ ์ญ์ด๋ ์ฝ๋์ ๊ฐ์ฅ ๋ฐ๊นฅ ์์ญ์ ๋งํ๋ค. ์ ์ญ์ ์ ์ญ ์ค์ฝํ๋ฅผ ๋ง๋ ๋ค. ์ ์ญ์ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์ ์ญ ์ค์ฝํ๋ฅผ ๊ฐ๋ ์ ์ญ ๋ณ์๊ฐ ๋๋ค. ์ ์ญ ๋ณ์๋ ์ด๋์๋ ์ง ์ฐธ์กฐํ ์ ์๋ค. - ์ง์ญ๊ณผ ์ง์ญ ์ค์ฝํ
์ง์ญ์ด๋ ํจ์ ๋ชธ์ฒด ๋ด๋ถ๋ฅผ ๋งํ๋ค. ์ง์ญ์ ์ง์ญ ์ค์ฝํ๋ฅผ ๋ง๋ ๋ค. ์ง์ญ์ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์ง์ญ ์ค์ฝํ๋ฅผ ๊ฐ๋ ์ง์ญ ๋ณ์๊ฐ ๋๋ค. ์ง์ญ ๋ณ์๋ ์์ ์ ์ง์ญ ์ค์ฝํ์ ํ์ ์ง์ญ ์ค์ฝํ์์ ์ ํจํ๋ค.
์ค์ฝํ ์ฒด์ธ
ํจ์๋ ์ค์ฒฉ๋ ์ ์์ผ๋ฏ๋ก ํจ์์ ์ง์ญ ์ค์ฝํ๋ ์ค์ฒฉ๋ ์ ์๋ค. ์ธ๋ถ ํจ์์ ์ง์ญ ์ค์ฝํ๋ฅผ ์ค์ฒฉ ํจ์์ ์์ ์ค์ฝํ๋ผ ํ๋ค.
๋ชจ๋ ์ค์ฝํ๋ ํ๋์ ๊ณ์ธต์ ๊ตฌ์กฐ๋ก ์ฐ๊ฒฐ๋๋ฉฐ ์ด๋ฅผ ์ค์ฝํ ์ฒด์ธ์ด๋ผ ํ๋ค. ๋ณ์๋ฅผ ์ฐธ์กฐํ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ค์ฝํ ์ฒด์ธ์ ํตํด ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ์ฝ๋์ ์ค์ฝํ์์ ์์ํ์ฌ ์์ ์ค์ฝํ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉฐ ์ ์ธ๋ ๋ณ์๋ฅผ ๊ฒ์ํ๋ค. ์ด๋ฅผ ํตํด ์์ ์ค์ฝํ์์ ์ ์ธํ ๋ณ์๋ฅผ ํ์ ์ค์ฝํ์์๋ ์ฐธ์กฐํ ์ ์๋ค.
- ์ค์ฝํ ์ฒด์ธ์ ์ํ ๋ณ์ ๊ฒ์
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ค์ฝํ ์ฒด์ธ์ ๋ฐ๋ผ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ์ฝ๋์ ์ค์ฝํ์์ ์์ํด์ ์์ ์ค์ฝํ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉฐ ์ ์ธ๋ ๋ณ์๋ฅผ ๊ฒ์ํ๋ค. ์ ๋ ํ์ ์ค์ฝํ๋ก ๋ด๋ ค๊ฐ๋ฉด์ ์๋ณ์๋ฅผ ๊ฒ์ํ๋ ์ผ์ ์๋ค. - ์ค์ฝํ ์ฒด์ธ์ ์ํ ํจ์ ๊ฒ์
ํจ์๋ ์๋ณ์์ ํ ๋น๋๊ธฐ ๋๋ฌธ์ ์ค์ฝํ๋ฅผ ๊ฐ๋๋ค. ํจ์๋ฅผ ํธ์ถํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด ๋จผ์ ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ฅผ ๊ฒ์ํ๋ค.
ํจ์ ๋ ๋ฒจ ์ค์ฝํ
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํจ์ ๋ชธ์ฒด๋ง์ด ์๋๋ผ ๋ชจ๋ ์ฝ๋ ๋ธ๋ก์ด ์ง์ญ ์ค์ฝํ๋ฅผ ๋ง๋ ๋ค. ์ด๋ฌํ ํน์ฑ์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ผ ํ๋ค. ํ์ง๋ง [ic]var[/ic]ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ค๋ก์ง ํจ์์ ์ฝ๋ ๋ธ๋ก๋ง์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ค. ์ด๋ฌํ ํน์ฑ์ ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ผ ํ๋ค.
ES6์์ ๋์ ๋ [ic]let[/ic], [ic]const[/ic] ํค์๋๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ์ง์ํ๋ค.
var x = 1;
if (true) {
// ํจ์ ๋ฐ์์ var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ฝ๋ ๋ธ๋ก ๋ด์์ ์ ์ธ๋์๋ค ํ ์ง๋ผ๋ ๋ชจ๋ ์ ์ญ ๋ณ์๋ค.
var x = 10;
}
console.log(x); // 10
๋ ์์ปฌ ์ค์ฝํ
- ๋์ ์ค์ฝํ : ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง์ ๋ฐ๋ผ ํจ์์ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค.
- ๋ ์์ปฌ ์ค์ฝํ or ์ ์ ์ค์ฝํ: ํจ์๋ฅผ ์ด๋์ ์ ์ํ๋์ง์ ๋ฐ๋ผ ํจ์์ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋์ง๊ฐ ์๋๋ผ ํจ์๋ฅผ ์ด๋์ ์ ์ํ๋์ง์ ๋ฐ๋ผ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค. ํจ์๊ฐ ํธ์ถ๋ ์์น๋ ์์ ์ค์ฝํ ๊ฒฐ์ ์ ์ด๋ ํ ์ํฅ๋ ์ฃผ์ง ์๋๋ค. ์ฆ, ํจ์์ ์์ ์ค์ฝํ๋ ์ธ์ ๋ ์์ ์ด ์ ์๋ ์ค์ฝํ๋ค.
์ด์ฒ๋ผ ํจ์์ ์์ ์ค์ฝํ๋ ํจ์ ์ ์๊ฐ ์คํ๋ ๋ ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๋ค. ํจ์ ์ ์๊ฐ ์คํ๋์ด ์์ฑ๋ ํจ์ ๊ฐ์ฒด๋ ์ด๋ ๊ฒ ๊ฒฐ์ ๋ ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ๋ค. ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํจ์์ ์์ ์ค์ฝํ๋ฅผ ์ฐธ์กฐํ๋ผ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1