๋ชฉ์ฐจ
JS ๋ค๋ฃจ๋ ํจ์์ ๋งค๊ฐ๋ณ์์ ๋ํด์ ์ดํด๋ณด์.
1. ํจ์์ ๋งค๊ฐ๋ณ์ ๊ฐ์๋ณด๋ค ๋ง์ด ๊ฐ์ ์ ๋ฌํ ๊ฒฝ์ฐ
์์ 1)
๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์์ด๋ค.
function sum(a, b){
return a + b;
}
console.log(
sum(1, 2),
sum(1, 2, 3),
sum(1, 2, 3, 4)
);
>>> 3 3 3
์์ ๊ฒฐ๊ณผ์ฒ๋ผ JS์์๋ ๋ค๋ฅธ ์ธ์ด์ ๋ค๋ฅด๊ฒ
ํจ์ ์ ์ ์ ์ค์ ํ ๋งค๊ฐ๋ณ์์ ๊ฐ์๋ณด๋ค ๋ง์ด ๊ฐ์ ์ ๋ฌํ๋ ๊ฒฝ์ฐ
์์๋๋ก ๊ฐ์ ๋ฐ์ ํ ๋๋จธ์ง๋ ๋ฌด์ํ๋ฉฐ ์ค๋ฅ๋ฅผ ์ผ์ผํค์ง ์๊ณ ๊ฐ์ ๋ฐํํ๋ค.
2. ๊ธฐ๋ณธ๊ฐ
๊ธฐ๋ณธ๊ฐ(default parameter)์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋ค์ด์ค์ง ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ์ค์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
function sum(a = 0, b = 0){
return a + b;
}
console.log(
sum()
);
>>> 0
๊ธฐ๋ณธ๊ฐ ์ค์ ์ ๋งค๊ฐ๋ณ์์ ๋ค์ชฝ์ ๋ชฐ๋ ค์ ์ค์ ํด์ผํ๋ค.
3. arguments
arguments๋ ํจ์์ ์ ๋ฌ๋ ๊ฐ๋ค์ ํด๋นํ๋ Arrayํํ์ ๊ฐ์ฒด์ด๋ค.
ํจ์ ํธ์ถ ์ ์ ๋ฌ๋ ๋ชจ๋ ์ธ์๋ค์ ๋ฐฐ์ด์ ํํ๋ก ํ์ฑํ๊ณ ์๋ค.
์ฆ, ์์์ ์ดํด๋ดค๋ฏ ๊ธฐ์กด ์ค์ ๋ ๋งค๊ฐ๋ณ์ ์๋ณด๋ค ๋ ๋ง์ ๊ฐ์ ์ ๋ฌํ๋ค๋ฉด
ํจ์ ์ฐ์ฐ์์๋ ๋์น ๋ฐ์ดํฐ๋ค์ด ๋ฌด์๋ ์ฑ ์ฐ์ฐ์ ๋ํ ๊ฐ์ ๋ฐํํ์ง๋ง
์ ๋ฌ๋์๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ arguments ๊ฐ์ฒด ์์ ์กด์ฌํ๋ค.
์ฃผ์ํ ์ ์ arguments ๊ฐ์ฒด๋ ํ์ดํ ํจ์์์ ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ค!
function์ผ๋ก ์ ์ํ ํจ์๊ฐ ๊ณ ์ฐจํจ์์ผ ๋์๋ง ๊ฐ๋ฅํ๋ค.
์์ 1)
function sum(a, b){
console.log(arguments);
return a + b;
}
console.log(
sum(1, 2, 3, 4)
);
>>> Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ] //arguments
>>> 3 //ํจ์ ์ฐ์ฐ ๊ฐ
์์ฒ๋ผ ์ ๋ฌํ ๋ชจ๋ ๊ฐ๋ค์ด arguments ์์ ์กด์ฌํ๋ค.
ํน์ง 1_ ๋ฐฐ์ด์ ํํ๋ฅผ ํ ๊ฐ์ฒด์ด๋ฏ๋ก ์ธ๋ฑ์ฑ ๊ฐ๋ฅ
function sum(a, b){
console.log(arguments[3]);
return a + b;
}
console.log(
sum(1, 2, 3, 4)
);
>>> 4 //์ธ๋ฑ์ฑ ๊ฐ
>>> 3 //ํจ์ ์ฐ์ฐ ๊ฐ
ํน์ง 2_ iterable์ด๋ฏ๋ก for ~ of ํ์ฉ ๊ฐ๋ฅ
function sum(){ //๋งค๊ฐ ๋ณ์ ์๋ฅผ ์ ํ์ง ์์
let result = 0;
for (item of arguments){ //์
๋ ฅ๋ฐ์ ๊ฐ๋ค์ ๊ฐ์ฒด ํ์ฉ
if(typeof item !== 'number') continue; //ํ์
ํ์ธ
result += item;
}
return result
}
console.log(
sum(1, 2, 3, 4),
sum(5, 10)
);
>>> 10 15
ํ์ฉ ํ๊ธฐ
const add = (a, b) => a + b;
const sub = (a, b) => a - b;
const mul = (a, b) => a * b;
const div = (a, b) => a / b;
function combineFunc() {
return (x, y) => {
let result = x;
for (const func of arguments){
if (typeof func !== 'function') continue; //ํจ์๋ง ์ ๋ฌ๋ฐ์
result = func(result, y); //ํ์ฌ ์ฐ์ฐ๊ฐ๊ณผ y๊ฐ ์ ๋ฌ
}
return result;
}
}
const add_mul = combineFunc(add, mul);
// console.log(add_mul); //ํจ์ ๋ฐํ
console.log(add_mul(3, 2)); // (3 + 2) * 2
>>> 10
4. ๋๋จธ์ง ๋ณ์ (... ๊ทธ๋ฃน๋ช )
๋๋จธ์ง ๋ณ์(rest parameters)๋ ํน์ ๋งค๊ฐ๋ณ์ ๋ค์ ์์ ๊ฐ์์ ๋งค๊ฐ๋ณ์๋ค์ ๋ฐ์ ๋ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ๊ฐ๊ณผ ๊ฐ์ด ๋ง์ง๋ง ์ธ์๋ก๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ํ ์ค์ ๋ฐฐ์ด์ด ๋ฐํ๋๋ค.
์์ 1)
console.log(
reminder(3, 12, 'Kassid', '์ฒญ์', '๊ณผ์ ')
);
function reminder(month, day, name, ...doIt){
console.log();
let doItList = ''
for (const item of doIt){
if (doItList) doItList += ', ';
doItList += item;
}
return `${month}์ ${day}์ผ Todo List : ${doItList}`
}
๋ฌผ๋ก ์์ ์์๋ ๋ฆฌ์คํธ์ ๋ฉ์๋ ์ค ํ๋์ธ join์ ํ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ๋๋ผ ์ ์์ง๋ง
for ~ of๋ฅผ ํ์ฉํด๋ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
์์ 2)
const add = (a, b) => a + b;
const sub = (a, b) => a - b;
const mul = (a, b) => a * b;
const div = (a, b) => a / b;
function combineFunc(x, y, ...funcs) {
let result = x;
for (const func of funcs) {
if (typeof func !== 'function') continue;
result = func(result, y);
}
return result;
}
console.log(
combineFunc(3, 2, add, mul)
);
>>> 10
arguments ์์๋ก ํ์ฉํ ํจ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋๋ก ๋ง๋ค์ด ๋ณด์๋ค.
๋งค๊ฐ ๋ณ์์ ์ธ์ ๊ด์ , ์ด์์ ์ธ ํจ์?
ํจ์๋ฅผ ๊ตฌ์ฑํ ๋ ์ด์์ ์ธ ํจ์๋ ์ด๋ค ๊ฒ์ผ๊น?
๋งค๊ฐ ๋ณ์์ ์ธ์์ ๊ด์ ์์ ๋ฐ๋ผ๋ณด์.
๋จผ์ , ์ํํ ํจ์.
์ธ๋ถ์ ๋ณ์๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ํํ ํจ์๋ผ๊ณ ํ ์ ์๋ค.
let a = 0;
let b = [1, 2];
function func(x, y){
x++;
y[0]++;
}
func(a, b);
console.log(a);
console.log(b);
>>> 0 //๋ณ๊ฒฝ X (์์ ๋ณ์)
>>> [2, 2] //๋ณ์ O (์ฐธ์กฐ ๋ณ์)
๋ฐ๋๋ก ์ด์์ ์ธ ํจ์!
๋ฐ์ ๊ฐ๋ค์ ๋ํด์๋ง ์ฒ๋ฆฌํ๊ณ ์๋ก์ด ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ด ์ด์์ ์ธ ํจ์๋ผ๊ณ ํ ์ ์๋ค.
let a = 0;
let b = [1, 2];
function addOne(x){
return x+1;
}
a = addOne(a);
b[0] = addOne(b[0]);
console.log(a);
console.log(b);
// ๋ชจ๋ ๋ณ๊ฒฝ
>>> 1
>>> [2, 2]
์ ๋ฆฌ
์ํํ ํจ์ = ์ธ๋ถ ํ๊ฒฝ ๋ณ๊ฒฝ
์ด์์ ์ธ ํจ์ = ๋ฐ์ ๊ฐ๋ค์ ๋ํด์๋ง ์ฒ๋ฆฌ ํ, ์ ๊ฐ ๋ฐํ
'๐ | WEB DEV > Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (23)_ ๊ฐ์ฒด + (0) | 2023.03.26 |
---|---|
JS_๊ธฐ์ (2)_ IIFE(์ฆ์ ์คํ ํจ์ ํํ) (0) | 2023.03.16 |
JS_๊ธฐ์ (1)_ ์ปค๋ง(currying) (0) | 2023.03.11 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (21)_ ์ผ๊ธ ๊ฐ์ฒด (0) | 2023.03.11 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (20)_ for ๋ฃจํ+ (0) | 2023.03.08 |
๋๊ธ