ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript] ํจ์
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 7. 19. 20:56ํจ์๋?
์ํ์ ํจ์๋ "์ ๋ ฅ"์ ๋ฐ์ "์ถ๋ ฅ"์ ๋ด๋ณด๋ด๋ ์ผ๋ จ์ ๊ณผ์ ์ ์ ์ํ ๊ฒ์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ์๋ ์ด์ ๊ฐ์ ๊ฐ๋ ์ธ๋ฐ ์ผ๋ จ์ ๊ณผ์ ์ ๋ฌธ์ผ๋ก ๊ตฌํํ๊ณ ์ฝ๋ ๋ธ๋ก์ผ๋ก ๊ฐ์ธ์ ํ๋์ ์คํ ๋จ์๋ก ์ ์ํ ๊ฒ์ ๋๋ค.
// ํจ์ ์ ์ธ
function add(x,y) {
return x + y;
}
// ํจ์ ํธ์ถ
add(2,5); // ๋ฐํ๊ฐ 7
ํจ์๋ ํจ์ ์ ์๋ฅผ ํตํด ์์ฑ๋๊ณ ์ธ์๋ฅผ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ํจ์์ ์ ๋ฌํ๋ฉด์ ํจ์์ ์คํ์ ๋ช ์์ ์ผ๋ก ์ง์ํ๋ ํจ์ ํธ์ถ์ ์งํํ๋ฉด ์ฝ๋ ๋ธ๋ก์ ๋ด๊ธด ๋ฌธ๋ค์ด ์ผ๊ด์ ์ผ๋ก ์คํ๋๊ณ ์คํ ๊ฒฐ๊ณผ์ธ ๋ฐํ๊ฐ์ ๋ฐํํฉ๋๋ค.
- ์๋ณ์ : ํจ์๋ฅผ ๊ตฌ๋ถํ๋ ํจ์ ์ด๋ฆ (add)
- ๋งค๊ฐ๋ณ์(parameter) : ํจ์ ๋ด๋ถ๋ก ์ ๋ ฅ์ ์ ๋ฌ๋ฐ๋ ๋ณ์(x,y)
- ์ธ์(argument) : ์ ๋ ฅ (2, 5)
- ๋ฐํ๊ฐ(return value) : ์ถ๋ ฅ (7)
ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ ์ง๋ณด์์ ํธ์์ฑ๊ณผ ์ฝ๋์ ์ ๋ขฐ์ฑ
์คํ ์์ ์ ๊ฐ๋ฐ์๊ฐ ๊ฒฐ์ ํ ์ ์๊ณ ๋ช ๋ฒ์ด๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํจ์๋ฅผ ํตํด ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ง๋ณด์์ ํธ์์ฑ์ด ๋์์ง๊ณ , ์ค์๋ฅผ ์ค์ฌ ์ฝ๋์ ์ ๋ขฐ์ฑ์ ๋์ด๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
์ฝ๋์ ๊ฐ๋ ์ฑ ํฅ์
์ ์ ํ ํจ์ ์ด๋ฆ์ ํตํด ํจ์ ๋ด๋ถ ์ฝ๋๋ฅผ ์ดํดํ์ง ์๊ณ ๋ ํจ์์ ์ญํ ์ ํ์ ํ ์ ์์ต๋๋ค.
ํจ์ ๋ฆฌํฐ๋ด
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ๊ฐ์ฒด ํ์ ์ ๊ฐ์ด๋ผ ํจ์๋ ํจ์ ๋ฆฌํฐ๋ด๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ผ๋ฐ ๊ฐ์ฒด๋ ํธ์ถํ ์ ์์ง๋ง ํจ์๋ ํธ์ถํ ์ ์์ต๋๋ค.
var f = function add(x,y) {
return x + y;
}
f(1 + 2); // 3
ํจ์ ๋ฆฌํฐ๋ด์ ๊ตฌ์ฑ ์์
๊ตฌ์ฑ ์์ | ์ค๋ช |
ํจ์ ์ด๋ฆ | - ์๋ณ์๋ผ ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ์ค์ํด์ผ ํจ - ํจ์ ๋ชธ์ฒด ๋ด์์๋ง ์ฐธ์กฐํ ์ ์๋ ์๋ณ์ - ์๋ต์ด ๊ฐ๋ฅํด์ ๊ธฐ๋ช ํจ์์ ๋ฌด๋ช /์ต๋ช ํจ์๋ก ๋๋ ์ ์์ |
๋งค๊ฐ๋ณ์ ๋ชฉ๋ก | - 0๊ฐ ์ด์์ ๋งค๊ฐ๋ณ์๋ฅผ ์๊ดํธ๋ก ๊ฐ์ธ๊ณ ์ผํ๋ก ๊ตฌ๋ถ - ๊ฐ ๋งค๋ฐฐ๋ณ์์๋ ํจ์๋ฅผ ํธ์ถํ ๋ ์ง์ ํ ์ธ์๊ฐ ์์๋๋ก ํ ๋น๋จ - ํจ์ ๋ชธ์ฒด ๋ด์์ ๋ณ์์ ๋์ผํ๊ฒ ์ทจ๊ธ๋์ด ์๋ณ์ ๋ค์ด๋ฐ ๊ท์น์ ์ค์ํด์ผํจ |
ํจ์ ๋ชธ์ฒด | - ํจ์๊ฐ ํธ์ถ๋์์ ๋ ์ผ๊ด์ ์ผ๋ก ์คํ๋ ๋ฌธ๋ค์ ์ฝ๋ ๋ธ๋ก - ํจ์ ํธ์ถ์ ์ํด ์คํ๋จ |
ํจ์ ์ ์
ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ด์ ์ ์ธ์๋ฅผ ์ ๋ฌ๋ฐ์ ๋งค๊ฐ๋ณ์์ ์คํํ ๋ฌธ๋ค, ๊ทธ๋ฆฌ๊ณ ๋ฐํํ ๊ฐ์ ์ง์ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํจ์๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ํจ์ ์ ์ธ๋ฌธ, ํจ์ ํํ์, Function ์์ฑ์ ํจ์, ํ์ดํ ํจ์(ES6) 4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค.
ํจ์ ์ ์ธ๋ฌธ
ํจ์ ๋ฆฌํฐ๋ด๊ณผ ๋์ผํ ํํ์ง๋ง ํจ์ ์ ์ธ๋ฌธ์ ํจ์ ์ด๋ฆ์ ์๋ตํ ์ ์์ต๋๋ค. ์๋์ ์์ ์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ฑ๋ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด ํจ์ ์ด๋ฆ๊ณผ ๋์ผํ ์ด๋ฆ์ ์๋ณ์๋ฅผ ์๋ฌต์ ์ผ๋ก ์์ฑํ๊ณ , ๊ฑฐ๊ธฐ์ ํจ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
// ํจ์ ์ ์ธ๋ฌธ
function add(x, y) {
return x + y;
}
ํจ์ ํํ์
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ *์ผ๊ธ ๊ฐ์ฒด์ ๋๋ค. ๋ฐ๋ผ์ ํจ์ ๋ฆฌํฐ๋ด๋ก ์์ฑํ ํจ์ ๊ฐ์ฒด๋ฅผ ๋ณ์์ ํ ๋นํ ์ ์์ต๋๋ค.
*์ผ๊ธ ๊ฐ์ฒด : ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ๊ฐ์ฒ๋ผ ๋ณ์์ ํ ๋นํ ์๋ ์๊ณ ํ๋กํผํฐ ๊ฐ์ด ๋ ์๋ ์์ผ๋ฉฐ ๋ฐฐ์ด์ ์์๊ฐ ๋ ์๋ ์์. ์ด๋ ๊ฒ ํจ์๋ฅผ ๊ฐ์ฒ๋ผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ๋ก ์ผ๊ธ ๊ฐ์ฒด๋ผ ํจ.
// ํจ์ ํํ์
var add = function (x, y) {
return x + y;
};
์์ ์์์ ๊ฐ์ด ํจ์ ๋ฆฌํฐ๋ด์ ํจ์ ์ด๋ฆ์ ์๋ตํด ์ต๋ช ํจ์๋ก ์ ์ํ ์ ์์ต๋๋ค. ํจ์ ์ ์ธ๋ฌธ๊ณผ ์ ์ฌํด ๋ณด์ด์ง๋ง ํจ์ ์ ์ธ๋ฌธ์ "ํํ์์ด ์๋ ๋ฌธ"์ด๊ณ , ํจ์ ํํ์์ "ํํ์์ธ ๋ฌธ"์ด๋ผ๋ ์ฐจ์ด์ ์ด ์์ด ์ ํํ ๋์ผํ๊ฒ ๋์ํ์ง๋ ์์ต๋๋ค.
ํจ์ ์์ฑ ์์ ๊ณผ ํจ์ ํธ์ด์คํ
ํจ์ ์ ์ธ๋ฌธ์ ํจ์ ํธ์ด์คํ ์ด ๋ฐ์ํ๊ณ ํจ์ ํํ์์ ๋ณ์ ํธ์ด์คํ ์ด ๋ฐ์ํฉ๋๋ค.
console.dir(add); // f add(x,y)
console.dir(sub); // undefined
console.log(add(1, 2)); // 3
console.log(sub(1, 2)); // TypeError
// ํจ์ ์ ์ธ๋ฌธ
function add(x,y) {
return x + y;
}
// ํจ์ ํํ์
var sub = function (x,y) {
return x - y;
}
- add()๋ ํจ์ ์ ์ธ๋ฌธ์ผ๋ก ์ ์ํ ํจ์๋ก ๋ฐํ์ ์ด์ ์ ํจ์ ๊ฐ์ฒด๊ฐ ๋จผ์ ์์ฑ๋๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์ ์ด๋ฆ๊ณผ ๋์ผํ ์ด๋ฆ์ ์๋ณ์๋ฅผ ์๋ฌต์ ์ผ๋ก ์์ฑํ๊ณ ์์ฑ๋ ํจ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํฉ๋๋ค. ์ด์ฒ๋ผ ํจ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ณ ์ ํน์ง์ ํจ์ ํธ์ด์คํ ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ add๋ฅผ ์ ์ธ๋ฌธ ์ด์ ์ ํธ์ถํด๋ ์ ์ ์๋ ํฉ๋๋ค.
- sub()๋ ํจ์ ํํ์์ผ๋ก ์ ์ํ ํจ์๋ก ๋ณ์๊ฐ ๋ณ์ ํธ์ด์คํ ์ ํตํด ๋ฐํ์ ์ด์ ์ undefined๋ก ์ด๊ธฐํ ๋๊ณ ๋ฐํ์์ ํ๊ฐ๋๋ ๊ฒ์ฒ๋ผ ํจ์ ํํ์์ ํจ์ ๋ฆฌํฐ๋ด๋ ํ ๋น๋ฌธ์ด ์คํ๋๋ ์์ ์ ํ๊ฐ๋์ด ํจ์ ๊ฐ์ฒด๊ฐ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํํ์ ์ด์ ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด TypeError๊ฐ ๋ฐ์ํฉ๋๋ค.
Function ์์ฑ์ ํจ์
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ธฐ๋ณธ ์ ๊ณตํ๋ ๋นํธ์ธ ํจ์๋ก ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก๊ณผ ํจ๊ป ๋ชธ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ์ ๋ฌํ๋ฉด์ new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ๋ฉด ํจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค.
var add = new Function('x', 'y', 'return x + y');
console.log(add(2,5)); // 7
ํ์ง๋ง Function ์์ฑ์ ํจ์ ๋ฐฉ์์ ํด๋ก์ ๋ฅผ ์์ฑํ์ง ์๋ ๋ฑ์ ๋จ์ ์ด ์์ด์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
ํ์ดํ ํจ์
ES6์์ ๋์ ๋ function ํค์๋ ๋์ ํ์ดํ => ๋ฅผ ์ด์ฉํด ์ข๋ ๊ฐ๋ตํ๊ฒ ํจ์๋ฅผ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋, ํ์ดํ ํจ์๋ ํญ์ ์ต๋ช ํจ์๋ก ์ ์๋๋ฉฐ *๋ด๋ถ ๋์ ๋ํ ๊ฐ๋ตํ ๋์ด์๋ ํน์ง์ด ์์ต๋๋ค.
const add = (x,y) => x + y;
console.log(add(2,5)); // 7
** ๋ด๋ถ ๋์ ๊ฐ๋ตํ
- ํ์ดํ ํจ์๋ ์์ฑ์ ํจ์๋ก ์ฌ์ฉํ ์ ์์
- ๊ธฐ์กด ํจ์์ this ๋ฐ์ธ๋ฉ ๋ฐฉ์์ด ๋ค๋ฆ
- prototype ํ๋กํฐํฐ๊ฐ ์๊ณ arguments ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์
ํจ์ ํธ์ถ
ํจ์๋ฅผ ํธ์ถํ๋ฉด ํ์ฌ์ ์คํ ํ๋ฆ์ ์ค๋จํ๊ณ ํธ์ถ๋ ํจ์๋ก ์คํ ํ๋ฆ์ ์ฎ๊ธฐ๊ฒ ๋๊ณ ๋งค๊ฐ๋ณ์์ ์ธ์๊ฐ ์์๋๋ก ํ ๋น๋๊ณ ํจ์ ๋ชธ์ฒด์ ๋ฌธ๋ค์ด ์คํ๋ฉ๋๋ค.
ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์์ ํ ์์ ์๊ดํธ์ธ ํจ์ ํธ์ถ ์ฐ์๋ก ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ ์ฐ์ฐ์ ๋ด์๋ 0๊ฐ ์ด์์ ์ธ์๋ฅผ ์ผํ๋ก ๊ตฌ๋ถํด์ ๋์ดํฉ๋๋ค. ๋ํ
๋งค๊ฐ๋ณ์์ ์ธ์
ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ๊ฐ์ ํจ์ ์ธ๋ถ์์ ํจ์ ๋ด๋ถ๋ก ์ ๋ฌํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ, ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ด๋ ์ธ์๋ ๊ฐ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ํํ์์ ๋๋ค.
function add(x,y) {
console.log(x, y); // 1, 2
return x + y;
}
var result = add(1,2); // result = 3
console.log(x, y); // ReferenceError
๋งค๊ฐ๋ณ์๋ ํจ์๋ฅผ ์ ์ํ ๋ ์ ์ธํ๋ฉฐ, ํจ์ ๋ชธ์ฒด ๋ด๋ถ์์ ๋ณ์์ ๋์ผํ๊ฒ ํํ๋ฉ๋๋ค. ์ฆ, ์ผ๋ฐ ๋ณ์์ ๋ง์ฐฌ๊ฐ์ง๋ก x์ y๊ฐ undefined๋ก ์ด๊ธฐํ๋ ์ดํ ์ธ์๊ฐ ์์๋๋ก ํ ๋น๋ฉ๋๋ค.
์ด๋ ์ฃผ์ํ ์ ์ ๋งค๊ฐ๋ณ์์ ์ค์ฝํ๋ ํจ์ ๋ด๋ถ์ด๊ธฐ ๋๋ฌธ์ ํจ์ ๋ชธ์ฒด ์ธ๋ถ์์๋ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํจ์ ์ธ๋ถ์์ x,y๋ฅผ ์ฐธ์กฐํ๋ ค ํ๋ฉด ์์ ์์์ ๊ฐ์ด ReferenceError๊ฐ ๋ฐ์๋ฉ๋๋ค.
function add(x,y) {
console.log(x, y); // 1, undefined
return x + y;
}
console.log(add(1)); // NaN
ํจ์๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์์ ์ธ์์ ๊ฐ์๊ฐ ์ผ์นํ๋์ง ์ฒดํฌํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ธ์๊ฐ ๋ถ์กฑํด์ ์ธ์๊ฐ ํ ๋น๋์ง ์์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ undefined๋ก ์ด๊ธฐํ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์์ ์์๋ 1 + undefined์ ๊ฒฐ๊ณผ์ธ NaN์ ๋ฐํํฉ๋๋ค.
function add(x,y) {
console.log(arguments); // Arguments(3) [1,2,3, callee: f, Symbol(Symbol.iterator): f]
return x + y;
}
console.log(add(1,2,3)); // 3
๋งค๊ฐ๋ณ์๋ณด๋ค ์ธ์๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ์ ์ด๊ณผ๋ ์ธ์๋ ๋ฌด์๋ฉ๋๋ค. ํ์ง๋ง, ๋ชจ๋ ์ธ์๋ ์๋ฌต์ ์ผ๋ก arguments ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๋ณด๊ด๋๊ธฐ ๋๋ฌธ์ arguments ๊ฐ์ฒด๋ ๊ฐ๋ณ ์ธ์ ํจ์๋ฅผ ๊ตฌํํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
์ธ์ ํ์ธ
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์์ ์ธ์ ํ์ธ ๋ฌธ์ ์
- ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ๋งค๊ฐ๋ณ์์ ์ธ์์ ๊ฐ์๊ฐ ์ผ์นํ๋์ง ํ์ธํ์ง ์์
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ ์ธ์ด๋ก์ ํจ์๋ ๋งค๊ฐ๋ณ์์ ํ์ ์ ์ฌ์ ์ ์ง์ ํ ์ ์์
์ธ์ ํ์ธ ํด๊ฒฐ๋ฒ
- ํจ์๋ฅผ ์ ์ํ ๋ ์ ์ ํ ์ธ์๊ฐ ์ ๋ฌ๋์๋์ง ํ์ธ ( ๋ฐํ์์ ์๋ฌ๊ฐ ๋ฐ์)
- ํ์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ ์ ์ ํ์ ์ ์ ์ธํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ํ์ฅ์ ๋์ (์ปดํ์ผ ์์ ๋ฐฉ์ง)
- arguments ๊ฐ์ฒด๋ฅผ ํตํด ์ธ์ ๊ฐ์๋ฅผ ํ์ธ
- ES6์์ ๋์ ๋ ๋งค๊ฐ๋ณ์ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํด ์ธ์ ์ฒดํฌ ๋ฐ ์ด๊ธฐํ๋ฅผ ๊ฐ์ํ
๋งค๊ฐ๋ณ์์ ์ต๋ ๊ฐ์
์ด์์ ์ธ ํจ์๋ ํ ๊ฐ์ง ์ผ๋ง ํด์ผํ๋ฉฐ ๊ฐ๊ธ์ ์๊ฒ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋งค๊ฐ๋ณ์ ๊ฐ์๋ ์ ์ ์๋ก ์ข๊ณ , ์ต๋ 3๊ฐ ์ด์์ ๋์ง ์๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ๋ง์ฝ, ๊ทธ ์ด์์ ๋งค๊ฐ๋ณ์๊ฐ ํ์ํ๋ฉด ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค.
// jQuery์ ajax ๋ฉ์๋์ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ ์
$.ajax({
method: 'POST',
url: '/user',
data: { id: 1, name: 'Lee' },
cache: false
});
- ํ๋กํผํฐ ํค๋ง ์ ํํ ์ง์ ํ๋ฉด ๋งค๊ฐ๋ณ์์ ์์๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋จ
- ํ๋กํผํฐ ํค(๋ช ์์ ์ผ๋ก ์ธ์์ ์๋ฏธ๋ฅผ ์ค๋ช )๋ฅผ ์ฌ์ฉํด ๊ฐ๋ ์ฑ์ด ์ข์์ง๊ณ ์ค์๊ฐ ์ค์ด๋ฆ
- ๊ฐ์ฒด๋ฅผ ํจ์ ๋ด๋ถ์์ ๋ณ๊ฒฝํ๋ฉด ์ธ๋ถ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ๋๋ ๋ถ์ ํจ๊ณผ๊ฐ ๋ฐ์ํ๋ ๋จ์
๋ฐํ๋ฌธ
๋ฐํ๋ฌธ์ return ํค์๋์ ํํ์์ผ๋ก ์ด๋ค์ง ๋ฌธ์ผ๋ก ์คํ ๊ฒฐ๊ณผ๋ฅผ ํจ์ ์ธ๋ถ๋ก ๋ฐํํด์ค๋๋ค.
- ๋ฐํ๋ฌธ์ ํจ์์ ์คํ์ ์ค๋จํ๊ณ ํจ์ ๋ชธ์ฒด๋ฅผ ๋น ์ ธ๋๊ฐ (return๋ฌธ ์ดํ ๋ฌธ์ ๋ฌด์๋จ)
- return ํค์๋ ๋ค์ ์ค๋ ํํ์์ ํ๊ฐํด ๋ฐํ
- ๋ฐํ ํํ์์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ง ์์ผ๋ฉด undefined๊ฐ ๋ฐํ๋จ
์ฐธ์กฐ์ ์ํ ์ ๋ฌ๊ณผ ์ธ๋ถ ์ํ์ ๋ณ๊ฒฝ
์์ ๊ฐ์ ๊ฐ์ ์ํ ์ ๋ฌ, ๊ฐ์ฒด๋ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ๋งค๊ฐ๋ณ์๋ ํจ์ ๋ชธ์ฒด ๋ด๋ถ์์ ๋ณ์์ ๋์ผํ๊ฒ ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์ ํ์ ์ ๋ฐ๋ผ ๊ฐ์ ์ํ ์ ๋ฌ๊ณผ ์ฐธ์กฐ์ ์ํ ์ ๋ฌ ๋ฐฉ์์ ๊ทธ๋๋ก ๋ฐ๋ฅด๊ฒ ๋ฉ๋๋ค.
*์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต์ ๋ํด์ ์์ธํ ์์๋ณด๋ ค๋ฉด ์๋๊ธ์ ์ฐธ๊ณ ํ์ธ์.
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" }
๋ฐ๋ผ์ ์์ ์์์ ๊ฐ์ด num์ ์์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ณํ์ง ์์์ง๋ง, person์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ธ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์๋ณธ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๋ถ์ ํจ๊ณผ๊ฐ ์ผ์ด๋ฌ์ต๋๋ค. ์ด๋ฌํ ๋ถ์ ํจ๊ณผ๋ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๊ณ ๊ฐ๋ ์ฑ์ ํด์น๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ๊ฐ์ฒด๋ฅผ ๋ถ๋ณ ๊ฐ์ฒด์ธ *์์ ํจ์ํํ๋ก ๋ง๋ค์ด ๊ฐ์ฒด์ ์ํ ๋ณ๊ฒฝ์ ์์ฒ๋ด์ํ๊ณ ๊ฐ์ฒด์ ์ํ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ํตํด ์๋ณธ ๊ฐ์ฒด๋ฅผ ๊น์ ๋ณต์ฌํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฌํ ๋น์ ํตํด ๊ต์ฒดํ์ฌ ๋ถ์ ํจ๊ณผ๋ฅผ ์์ฑ๋๋ค.
*์์ ํจ์ : ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ธ๋ถ ์ํ์ ์์กดํ์ง๋ ์๋ ํจ์
๋ค์ํ ํจ์์ ํํ
์ฆ์ ์คํ ํจ์
ํจ์ ์ ์์ ๋์์ ์ฆ์ ํธ์ถ๋๋ ํจ์
(function () {
var a = 3;
var b = 5;
return a*b;
}());
- ์ผ๋ฐ์ ์ผ๋ก ์ต๋ช ํจ์๋ฅผ ์ฌ์ฉ
- ๋ฐ๋์ ๊ทธ๋ฃน ์ฐ์ฐ์( ... )๋ก ๊ฐ์ธ์ผํจ
์ฌ๊ท ํจ์
ํจ์๊ฐ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ์ฌ๊ท ํธ์ถ์ ์ํํ๋ ํจ์
function countdown(n) {
// ํ์ถ ์กฐ๊ฑด
if(n < 0) {
return;
}
console.log(n);
countdown(n - 1); // ์ฌ๊ทํธ์ถ
}
countdown(10); // 10 9 8 7 6 5 4 3 2 1 0
- ๋ฐ๋ณต๋๋ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ
- ์ฌ๊ท ํธ์ถ์ ๋ฉ์ถ ์ ์๋ ํ์ถ ์กฐ๊ฑด์ ๋ง๋์ ๋ง๋ค์ด์ผํจ (์คํ ์ค๋ฒํ๋ก ์๋ฌ ๋ฐฉ์ง)
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฌ์ธ ๋ ํ์ ์ ์ผ๋ก ์ฌ์ฉ
์ค์ฒฉ ํจ์
ํจ์ ๋ด๋ถ์ ์ ์๋ ํจ์๋ก, ๋ด๋ถ ํจ์๋ผ๊ณ ๋ ํฉ๋๋ค. ๋ํ ์ค์ ํจ์๋ฅผ ํฌํจํ๋ ํจ์๋ ์ธ๋ถ ํจ์์ ๋๋ค.
function outer() {
var x = 1;
// ์ค์ฒฉ ํจ์
function inner() {
var y = 2;
// ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐ
console.log(x + y); // 3
}
inner();
}
outer();
- ์ค์ฒจ ํจ์๋ ์ธ๋ถ ํจ์ ๋ด์์๋ง ํธ์ถ ๊ฐ๋ฅ
- ์ฃผ๋ก ์ธ๋ถ ํจ์๋ฅผ ๋๋ ํฌํผ ํจ์์ ์ญํ
- ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐ ํ ์ ์์
์ฝ๋ฐฑ ํจ์
ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋ค๋ฅธ ํจ์์ ๋ด๋ถ๋ก ์ ๋ฌ๋๋ ํจ์๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ํ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ํจ์์ ์ธ๋ถ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ๊ณ ์ฐจํจ์๋ผ๊ณ ํฉ๋๋ค.
์ฝ๋ฐฑ ํจ์๋ ๊ณ ์ฐจํจ์์ ์ํด ํธ์ถ๋๋ฉฐ ์ด๋ ๊ณ ์ฐจ ํจ์๋ ํ์์ ๋ฐ๋ผ ์ฝ๋ฐฑ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
function repaet(n, f) {
for(var i=0;i<n;i++) {
f(i);
}
}
var logOdds = function(i) {
if (i%2) console.log(i);
};
repeat(5,logOdds); // 1 3
- ์ฝ๋ฐฑ ํจ์๋ ๊ณ ์ฐจ ํจ์์ ์ ๋ฌ๋์ด ํฌํผ ํจ์์ ์ญํ ์ ํจ
- ๊ณ ์ฐจ ํจ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์์ ์ ์ผ๋ถ๋ถ์ผ๋ก ํฉ์ฑํจ
- ๊ณ ์ฐจ ํจ์๋ ๋งค๋ฐฐ๋ณ์๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ ์ฝ๋ฐฑ ํจ์์ ํธ์ถ ์์ ์ ๊ฒฐ์ ํด ํธ์ถ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ์๋ ํ์ฉ๋๋ ํจํด์
- ๋ฐฐ์ด ๊ณ ์ฐจ ํจ์์์๋ ์ฌ์ฉ๋จ
์์ ํจ์์ ๋น์์ ํจ์
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฉํฐ ํจ๋ฌ๋ค์ ์ธ์ด๋ก์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๋ฟ๋ง ์๋๋ผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํฉ๋๋ค
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ ํจ์์ ๋ณด์กฐ ํจ์์ ์กฐํฉ์ ํตํด ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ์ต์ํํด์ ๋ถ๋ณ์ฑ์ ์งํฅํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋๋ค. ์์ ํจ์๋ฅผ ํตํด ๋ถ์ ํจ๊ณผ๋ฅผ ์ต๋ํ ์ต์ ํด ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
ํจ์ ์ข ๋ฅ | ์ค๋ช |
์์ ํจ์ | - ๋ถ์ ํจ๊ณผ๊ฐ ์์ (์ด๋ค ์ธ๋ถ ์ํ์ ์์กดํ์ง๋ ์๊ณ ๋ณ๊ฒฝํ์ง๋ ์์) - ๋์ผํ ์ธ์๊ฐ ์ ๋ฌ๋๋ฉด ์ธ์ ๋ ๋์ผํ ๊ฐ์ ๋ฐํํจ - ์ผ๋ฐ์ ์ผ๋ก ์ต์ ํ๋ ์ด์์ ์ธ์๋ฅผ ์ ๋ฌ๋ฐ์ - ์ธ์์ ๋ถ๋ณ์ฑ์ ์ ์งํจ |
๋น์์ ํจ์ | - ๋ถ์ ํจ๊ณผ๊ฐ ์์ (์ธ๋ถ ์ํ์ ์์กดํ๊ฑฐ๋ ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํจ) - ์ํ ๋ณํ๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ค์์ง - ์ฝ๋์ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์์ผ ๊ฐ๋ ์ฑ์ ํด์น๊ณ , ์ค๋ฅ ๋ฐ์์ ์์ธ์ด ๋ ์ ์์ |
*ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋๊ธ์ ์ฐธ๊ณ ํ์ธ์.
https://j-su2.tistory.com/35?category=1033772
[์ถ์ฒ] ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive
'JavaScript > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์ ์ญ ๋ณ์์ ๋ฌธ์ ์ (0) | 2022.07.21 |
---|---|
[JavaScript] ์ค์ฝํ (0) | 2022.07.20 |
[JavaScript] ์์ ๊ฐ๊ณผ ๊ฐ์ฒด์ ๋น๊ต (0) | 2022.07.18 |
[JavaScript] ๊ฐ์ฒด ๋ฆฌํฐ๋ด (0) | 2022.07.18 |
[JavaScript] ํ์ ๋ณํ๊ณผ ๋จ์ถ ํ๊ฐ (0) | 2022.07.15 |
- Total
- Today
- Yesterday
- ์ ์ญ ๋ณ์
- ๋ฐฑ์ค node.js
- fp
- ์ด๋ถํ์
- ๋ฐฑ์ค
- http
- ๋ ์์ปฌ ํ๊ฒฝ
- ๋ฐฑ์ค javascript
- ์ฝ๋ฉํ ์คํธ
- ์๋ฐ์คํฌ๋ฆฝํธ
- map
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ๋คํธ์ํฌ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- JavaScript
- ์นด์นด์ค ์ธํด
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋กํ ์ฝ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ํ๋กํผํฐ
- TDD
- ์ด์์ฒด์
- ํฌํฌ์ธํฐ
- Baekjoon
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ๋์์ธ ํจํด
- ์๋ฐ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- git
- ํ๋ก๊ทธ๋๋จธ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |