ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ์๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋ฌธ์ผ๋ก ๊ตฌํํ๊ณ ์ฝ๋ ๋ธ๋ก์ผ๋ก ๊ฐ์ธ์ ํ๋์ ์คํ ๋จ์๋ก ์ ์ํ ๊ฒ์ด๋ค.
ํจ์๋ ํจ์ ์ ์๋ฅผ ํตํด ์์ฑํ๋ค.
// ํจ์ ์ ์
function add(x,y) {
return x+y;
}
์ธ์๋ฅผ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ํจ์์ ์ ๋ฌํ๋ฉด์ ํจ์์ ์คํ์ ๋ช ์์ ์ผ๋ก ์ง์ํด์ผ ํ๋ค. ์ด๋ฅผ ํจ์ ํธ์ถ์ด๋ผ ํ๋ค. ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ฝ๋ ๋ธ๋ก์ ๋ด๊ธด ๋ฌธ๋ค์ด ์ผ๊ด์ ์ผ๋ก ์คํ๋๊ณ , ์คํ ๊ฒฐ๊ณผ, ์ฆ ๋ฐํ๊ฐ์ ๋ฐํํ๋ค.
// ํจ์ ํธ์ถ var result = add(2,5); // ํจ์ add์ ์ธ์ 2, 5๋ฅผ ์ ๋ฌํ๋ฉด์ ํธ์ถํ๋ฉด ๋ฐํ๊ฐ 7์ ๋ฐํํ๋ค. console.log(result); // 7
ํจ์๋ ๋ช ๋ฒ์ด๋ ํธ์ถํ ์ ์์ผ๋ฏ๋ก ์ฝ๋์ ์ฌ์ฌ์ฉ์ด๋ผ๋ ์ธก๋ฉด์์ ๋งค์ฐ ์ ์ฉํ๋ค.
์ ์ง๋ณด์์ ํธ์์ฑ์ ๋์ด๊ณ ์ค์๋ฅผ ์ค์ฌ ์ฝ๋์ ์ ๋ขฐ์ฑ์ ๋์ธ๋ค
์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฅ์
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ๊ฐ์ฒด ํ์ ์ ๊ฐ์ด๋ค. ๋ฐ๋ผ์ ์ซ์ ๊ฐ์ ์ซ์ ๋ฆฌํฐ๋ด๋ก ์์ฑํ๋ ๊ฒ์ฒ๋ผ ํจ์๋ ํจ์ ๋ฆฌํฐ๋ด๋ก ์์ฑํ ์ ์๋ค. ํจ์ ๋ฆฌํฐ๋ด์ function ํค์๋ ํจ์ ์ด๋ฆ, ๋งค๊ฐ ๋ณ์ ๋ชฉ๋ก, ํจ์ ๋ชธ์ฒด๋ก ๊ตฌ์ฑ๋๋ค
// ๋ณ์์ ํจ์ ๋ฆฌํฐ๋ด์ ํ ๋น var f = function add(x,y) { return x+y; };
ํจ์๋ ๊ฐ์ฒด๋ค ํจ์๋ ๊ฐ์ฒด์ง๋ง ์ผ๋ฐ ๊ฐ์ฒด์๋ ๋ค๋ฅด๋ค. ์ผ๋ฐ ๊ฐ์ฒด๋ ํธ์ถํ ์ ์์ง๋ง ํจ์๋ ํธ์ถํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ ๊ฐ์ฒด์๋ ์๋ ํจ์ ๊ฐ์ฒด๋ง์ ๊ณ ์ ํ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค.
ํจ์ ์ ์ ๋ฐฉ์ | ์์ |
---|---|
ํจ์ ์ ์ธ๋ฌธ | function add(x,y) { return x+y; }; |
ํจ์ ํํ์ | var add= function add(x,y) { return x+y; }; |
Function ์์ฑ์ ํจ์ | var add = new Function('x','y', 'return x+y'); |
ํ์ดํ ํจ์(ES6) | var add = (x,y) => x+y; |
๋ณ์ ์ ์ธ๊ณผ ํจ์ ์ ์
๋ณ์๋ ์ ์ธํ๋ค๊ณ ํ์ง๋ง ํจ์๋ ์ ์ํ๋ค๊ณ ํํํ๋ค. ํจ์ ์ ์ธ๋ฌธ์ด ํ๊ฐ๋๋ฉด ์๋ณ์๊ฐ ์๋ฌต์ ์ผ๋ก ์์ฑ๋๊ณ ํจ์ ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ค. ๋ฐ๋ผ์ ECMAScript ์ฌ์์์๋ ๋ณ์์๋ ์ ์ธ, ํจ์์๋ ์ ์๋ผ๊ณ ํํํ๋ค.
function add(x,y){
return x+y;
}
//ํจ์ ์ฐธ์กฐ
// console.dir์ console.log์๋ ๋ฌ๋ฆฌ ํจ์ ๊ฐ์ฒด์ ํ๋กํผํฐ๊น์ง ์ถ๋ ฅํ๋ค.
// ๋จ,Node.js ํ๊ฒฝ์์๋ console.log์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค.
console.dir(add); // f add(x,y)
//ํจ์ ํธ์ถ
console.log(add(2,5)); //7
ํจ์ ์ ์ธ๋ฌธ์ ํจ์ ๋ฆฌํฐ๋ด๊ณผ ํํ๊ฐ ๋์ผํ๋ค. ๋จ, ํจ์ ๋ฆฌํฐ๋ด์ ํจ์ ์ด๋ฆ์ ์๋ตํ ์ ์์ผ๋ ํจ์ ์ ์ธ๋ฌธ์ ํจ์ ์ด๋ฆ์ ์๋ตํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ๊ฐ์ฒ๋ผ ๋ณ์์ ํ ๋น ํ ์๋ ์๊ณ ํ๋กํผํฐ ๊ฐ์ด ๋ ์๋ ์์ผ๋ฉฐ ๋ฐฐ์ด์ ์์๊ฐ ๋ ์ ์๋ค. ์ด์ฒ๋ผ ๊ฐ์ ์ฑ์ง์ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ผ ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด๋ค.
// ํจ์ ํํ์
var add = function (x,y) {
return x + y;
};
console.log(add(2,5)); // 7
// ํจ์ ์ฐธ์กฐ
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;
};
ํจ์ ์ ์ธ๋ฌธ์ผ๋ก ์ ์ํ ํจ์๋ ํจ์ ์ ์ธ๋ฌธ ์ด์ ์ ํธ์ถํ ์ ์๋ค. ๊ทธ๋ฌ๋ ํจ์ ํํ์์ผ๋ก ์ ์ํ ํจ์๋ ํจ์ ํํ์ ์ด์ ์ ํธ์ถํ ์ ์๋ค. ์ด๋ ํจ์ ์ ์ธ๋ฌธ์ผ๋ก ์ ์ํ ํจ์์ ํจ์ ํํ์์ผ๋ก ์ ์ํ ํจ์์ ์์ฑ ์์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ ์ ํน์ง์ ํจ์ ํธ์ด์คํ ์ด๋ผ ํ๋ค.
ES6์์ ๋์ ๋ ํ์ดํ ํจ์๋ function ํค์๋ ๋์ ํ์ดํ๋ฅผ ์ฌ์ฉํด ์ข ๋ ๊ฐ๋ตํ ๋ฐฉ๋ฒ์ผ๋ก ํจ์๋ฅผ ์ ์ธํ ์ ์๋ค. ํ์ดํ ํจ์๋ ํญ์ ์ต๋ช ํจ์๋ก ์ ์ํ๋ค.
// ํ์ดํ ํจ์
const add= (x,y) => x+y;
console.log(add(2,5)); // 7
ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ๊ฐ์ ํจ์ ์ธ๋ถ์์ ํจ์ ๋ด๋ถ๋ก ์ ๋ฌํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ, ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํ๋ค. ์ธ์๋ ๊ฐ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ํํ์์ด์ด์ผ ํ๋ค. ์ธ์๋ ํจ์๋ฅผ ํธ์ถํ ๋ ์ง์ ํ๋ฉฐ, ๊ฐ์์ ํ์ ์ ์ ํ์ด ์๋ค.
// ํจ์ ์ ์ธ๋ฌธ
function add(x,y) {
return x+y;
}
// ํจ์ ํธ์ถ
// ์ธ์ 1๊ณผ 2๊ฐ ๋งค๊ฐ๋ณ์ x์ y์ ์์๋๋ก ํ ๋น๋๊ณ ํจ์ ๋ชธ์ฒด์ ๋ฌธ๋ค์ด ์คํ๋๋ค.
var result = add(1,2);
ํจ์๋ return ํค์๋์ ํํ์์ผ๋ก ์ด๋ค์ง ๋ฐํ๋ฌธ์ ์ฌ์ฉํด ์คํ ๊ฒฐ๊ณผ๋ฅผ ํจ์ ์ธ๋ถ๋ก ๋ฐํํ ์ ์๋ค.
function multiply(x,y){
return x * y; // ๋ฐํ๋ฌธ
}
// ํจ์ ํธ์ถ์ ๋ฐํ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค.
var result = multiply(3,5);
console.log(result); // 15
๋ฐํ๋ฌธ์ ๋๊ฐ์ง ์ญํ ์ ํ๋ค
ํจ์ ์ ์์ ๋์์ ์ฆ์ ํธ์ถ๋๋ ํจ์๋ฅผ ์ฆ์ ์คํ ํจ์๋ผ๊ณ ํ๋ค. ์ฆ์ ์คํ ํจ์๋ ๋จ ํ ๋ฒ๋ง ํธ์ถ๋๋ฉฐ ๋ค์ ํธ์ถํ ์ ์๋ค.
// ์ต๋ช
์ฆ์ ์คํ ํจ์
(function () {
var a = 3;
var b = 5;
return a + b;
}());
์ฆ์ ์คํ ํจ์๋ ํจ์ ์ด๋ฆ์ด ์๋ ์ต๋ช ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
ํจ์๊ฐ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ๊ฒ์ ์ฌ๊ท ํธ์ถ์ด๋ผ ํ๋ค. ์ฌ๊ท ํจ์๋ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํ์, ์ฆ ์ฌ๊ท ํธ์ถ์ ์ํํ๋ ํจ์๋ฅผ ๋งํ๋ค.
์ฌ๊ท ํจ์๋ ๋ฐ๋ณต๋๋ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ค.
function countdown(n) {
if (n < 0) return;
console.log(n)
countdown(n - 1); // ์ฌ๊ท ํธ์ถ
}
conutdown(10);
์ฌ๊ท ํจ์๋ ๋ฐ๋ณต๋๋ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณต๋ฌธ ์์ด ๊ตฌํํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง ๋ฌดํ ๋ฐ๋ณต์ ๋น ์ง ์ํ์ด ์๊ณ , ์ด๋ก ์ธํด ์คํ ์ค๋ฒํ๋ก ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
ํจ์ ๋ด๋ถ์ ์ ์๋ ํจ์๋ฅผ ์ค์ฒฉ ํจ์ ๋๋ ๋ด๋ถ ํจ์๋ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ฒฉ ํจ์๋ฅผ ํฌํจํ๋ ํจ์๋ ์ธ๋ถ ํจ์๋ผ ๋ถ๋ฅธ๋ค. ์ค์ฒฉ ํจ์๋ ์ธ๋ถ ํจ์ ๋ด๋ถ์์๋ง ํธ์ถํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ค์ฒฉํจ์๋ ์์ ์ ํฌํจํ๋ ์ธ๋ถ ํจ์๋ฅผ ๋๋ ํฌํผ ํจ์์ ์ญํ ์ ํ๋ค.
function outer() {
var x = 1;
//์ค์ฒฉ ํจ์
function inner() {
var y = 2;
// ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
console.log(x+y); // 3
}
inner();
}
outer();
ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋ค๋ฅธ ํจ์์ ๋ด๋ถ๋ก ์ ๋ฌ๋๋ ํจ์๋ฅผ ์ฝ๋ฐฑ ํจ์๋ผ๊ณ ํ๋ฉฐ, ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ํจ์์ ์ธ๋ถ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ๊ณ ์ฐจ ํจ์๋ผ๊ณ ํ๋ค.
๊ณ ์ฐจ ํจ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์์ ์ ์ผ๋ถ๋ถ์ผ๋ก ํฉ์ฑํ๋ค. ๊ณ ์ฐจ ํจ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ ์ฝ๋ฐฑ ํจ์์ ํธ์ถ ์์ ์ ๊ฒฐ์ ํด์ ํธ์ถํ๋ค.
//์ธ๋ถ์์ ์ ๋ฌ๋ฐ์ f๋ฅผ n๋งํผ ๋ฐ๋ณต ํธ์ถํ๋ค.
function repeat(n, f){
for(var i = 0; i < n; i++){
f(i); // i๋ฅผ ์ ๋ฌํ๋ฉด์ f๋ฅผ ํธ์ถ
}
}
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