๐ ์ต๋ช ํจ์
function () {}
์ด๋ฆ์ด ๋ถ์ด์์ง ์์ ํจ์๋ฅผ ์ต๋ช ํจ์(anonymous function)๋ผ๊ณ ํํํ๋ค.
๐ ์ ์ธ์ ํจ์
function ํจ์() {
}
let ํจ์ = function () {};
'์ต๋ช ํจ์'์ ๋ฌ๋ฆฌ ์ด๋ฆ์ด ์๋ ํจ์๋ค.
๐ ๋งค๊ฐ๋ณ์์ ๋ฆฌํด๊ฐ
๋งค๊ฐ๋ณ์ : ํจ์๋ฅผ ํธ์ถํ ๋ ๊ดํธ ์์ ์ ๋ ๊ฒ(input)
๋ฆฌํด๊ฐ : ํจ์์ ์ต์ข ๊ฒฐ๊ณผ(output)
function ํจ์(๋งค๊ฐ๋ณ์, ๋งค๊ฐ๋ณ์, ๋งค๊ฐ๋ณ์) {
// ์ฝ๋ ๋ด์ฉ
return ๋ฆฌํด๊ฐ
}
๐ ๋๋จธ์ง ๋งค๊ฐ๋ณ์
๋งค๊ฐ๋ณ์ ์์ ๋ง์นจํ 3๊ฐ(...)๋ฅผ ์ ๋ ฅํ๋ฉด ๋งค๊ฐ๋ณ์๋ค์ด ๋ฐฐ์ด๋ก ๋ค์ด์จ๋ค.
function ํจ์ ์ด๋ฆ(...๋๋จธ์ง ๋งค๊ฐ๋ณ์) { }
๋งค๊ฐ๋ณ์์ ๊ฐ์๊ฐ ๊ณ ์ ์ ์ด์ง ์์ ํจ์๋ฅผ ๊ฐ๋ณ ๋งค๊ฐ๋ณ์ ํจ์๋ผ๊ณ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ด๋ฌํ ํจ์๋ฅผ ๊ตฌํํ ๋๋ ๋๋จธ์ง ๋งค๊ฐ๋ณ์(rest parameter)๋ผ๋ ํน์ดํ ํํ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค.
๐ ๋๋จธ์ง ๋งค๊ฐ๋ณ์์ ์ผ๋ฐ ๋งค๊ฐ๋ณ์ ์กฐํฉํ๊ธฐ
function ํจ์ ์ด๋ฆ(๋งค๊ฐ๋ณ์, ๋งค๊ฐ๋ณ์, ...๋๋จธ์ง ๋งค๊ฐ๋ณ์) { }
์์์ ๋ง๊ฒ ์ผ๋ฐ ๋งค๊ฐ๋ณ์๊ฐ ๋จผ์ ๋ค์ด๊ฐ๊ณ , ๋จ์ ๊ฒ๋ค์ ๋ชจ๋ ๋๋จธ์ง ๋งค๊ฐ๋ณ์(๋ฐฐ์ด) ํํ๋ก ๋ค์ด๊ฐ๋ค.
๐ ์ ๊ฐ ์ฐ์ฐ์
ํจ์ ์ด๋ฆ(...๋ฐฐ์ด)
๋ฐฐ์ด์ ์ ๊ฐํด์ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํด์ฃผ๋ ์ ๊ฐ ์ฐ์ฐ์(spread operator)
๐ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์
ํจ์ ์ด๋ฆ(๋งค๊ฐ๋ณ์, ๋งค๊ฐ๋ณ์=๊ธฐ๋ณธ๊ฐ, ๋งค๊ฐ๋ณ์=๊ธฐ๋ณธ๊ฐ)
๐ ์ฝ๋ฐฑ ํจ์
์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์๋ ํ๋์ ์๋ฃํ์ด๋ฏ๋ก ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ์ ์๋ค. - JS์์ ํจ์๋ 1๊ธ ๊ฐ์ฒด๋ค.)
๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ ํจ์๋ฅผ ์ฝ๋ฐฑ(callback)ํจ์๋ผ๊ณ ํ๋ค.
์ฝ๋ฐฑ ํจ์(1) : ์ ์ธ์ ํจ์ ์ฌ์ฉ
function callThreeTimes (callback) {
for(let i = 9; i < 2; i++) {
callback(i)
}
}
function print (i) {
console.log(`${i}๋ฒ์งธ ํจ์ ํธ์ถ`)
}
callThreeTimes(print) // ํจ์ ํธ์ถ
/*
0๋ฒ์งธ ํจ์ ํธ์ถ
1๋ฒ์งธ ํจ์ ํธ์ถ
2๋ฒ์งธ ํจ์ ํธ์ถ
*/
์ฝ๋ฐฑ ํจ์(2) : ์ต๋ช ํจ์ ์ฌ์ฉ
function callThreeTimes (callback) {
for(let i = 9; i < 2; i++) {
callback(i)
}
}
callThreeTimes(function(i) {
console.log(`${i}๋ฒ์งธ ํจ์ ํธ์ถ`)
}) // ํจ์ ํธ์ถ
/*
0๋ฒ์งธ ํจ์ ํธ์ถ
1๋ฒ์งธ ํจ์ ํธ์ถ
2๋ฒ์งธ ํจ์ ํธ์ถ
*/
์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ฉํ๋ ํจ์ : forEach()
๋ฐฐ์ด์ด ๊ฐ๊ณ ์๋ ํจ์(๋ฉ์๋)๋ค.
๋ฐฐ์ด ๋ด๋ถ์ ์์๋ฅผ ์ฌ์ฉํด์ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๋ค.
function (value, index, array) { }
const numbers = [279, 13, 3, 12, 7]
numbers.forEach(function (value, index, array) {
console.log(`${index}๋ฒ์งธ ์์ : ${value}`)
})
/*
0๋ฒ์งธ ์์ : 279
1๋ฒ์งธ ์์ : 13
2๋ฒ์งธ ์์ : 3
3๋ฒ์งธ ์์ : 12
4๋ฒ์งธ ์์ : 7
*/
์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ฉํ๋ ํจ์ : map()
๋ฐฐ์ด์ด ๊ฐ๊ณ ์๋ ํจ์๋ค.
์ฝ๋ฐฑ ํจ์์์ ๋ฆฌํดํ ๊ฐ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ ๋ค.
let numbers = [5, 4, 3, 2, 1]
numbers = numbers.map(function (value, index, array) {
return value * value
})
numbers.forEach(console.log)
/*
25 0 Array(5)
16 1 Array(5)
9 2 Array(5)
4 3 Array(5)
1 4 Array(5)
*/
์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ฉํ๋ ํจ์ : filter()
๋ฐฐ์ด์ด ๊ฐ๊ณ ์๋ ํจ์๋ค.
์ฝ๋ฐฑ ํจ์์์ ๋ฆฌํดํ๋ ๊ฐ์ด true์ธ ๊ฒ๋ค๋ง ๋ชจ์์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋๋ ํจ์๋ค.
const numbers = [1, 2, 3, 4, 5]
const evenNumbers = numbers.filter(function (value) {
return value % 2 === 0
})
console.log(`์๋ ๋ฐฐ์ด : ${numbers}`)
console.log(`์ง์๋ง ์ถ์ถ : ${evenNumbers}`)
/*
์๋ ๋ฐฐ์ด : 1,2,3,4,5
์ง์๋ง ์ถ์ถ : 2,4
*/
๐ ํ์ดํ ํจ์
map(), filter() ํจ์์ฒ๋ผ ๋จ์ํ ํํ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฝ๊ฒ ์ ๋ ฅํ๊ณ ์ ํ์ดํ ํจ์(arrow function)๋ผ๋ ํจ์ ์์ฑ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
function ํค์๋ ๋์ ํ์ดํ(=>)๋ฅผ ์ฌ์ฉํ๋ค.
(๋งค๊ฐ๋ณ์) => {
} ๋ถ ํํ์ || ๋ถ ํํ์์ด ๊ฑฐ์ง์ผ ๋ ์คํํ ๋ฌธ์ฅ
/*----------------------------------------*/
(๋งค๊ฐ๋ณ์) => ๋ฆฌํด๊ฐ
const array = [1, 2, 3, 4, 5]
array.map((value) => value * value)
// (5) [1, 4, 9, 16, 25]
let numbers = [1, 2, 3, 4, 5, 6, 7]
numbers
.filter((value) => value % 2 === 0)
.map((value) => value * value)
.forEach((value) => {
console.log(value)
})
/*
4
16
36
*/
์์ฒ๋ผ ์ด๋ค ๋ฉ์๋๊ฐ ๋ฆฌํดํ๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํด์ ํจ์๋ฅผ ์ค์ค์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋ฉ์๋ ์ฒด์ด๋(method chaining)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โป ์ฐธ๊ณ ๋์ : ํผ์ ๊ณต๋ถํ๋ ์๋ฐ์คํฌ๋ฆฝํธ(ํผ๊ณต์ค)
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ - ๋ฐฐ์ด (0) | 2021.02.25 |
---|---|
[JS] ์๋ฐ์คํฌ๋ฆฝํธ - ๋ฐ๋ณต๋ฌธ (0) | 2021.01.29 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ - ์กฐ๊ฑด๋ฌธ (0) | 2021.01.27 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ด (0) | 2021.01.26 |
๋๊ธ