ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ค.
๋ฐ๋ผ์ ํจ์๋ฅผ ๋ณ์์ ํ ๋นํ ์ ์๊ณ , ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ์ ์ ์๊ณ , ํจ์๋ฅผ ๋ฆฌํดํ ์ ์๋ค.
์ด๋ <ํจ์๋ฅผ ๋ฆฌํดํ๋ ํจ์>, <ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ๋ ํจ์>๋ฅผ ๋ชจ๋
๊ณ ์ฐจํจ์
๋ผ๊ณ ๋ถ๋ฅธ๋ค.
function returnFunction() {
return function printHello (){
return 'Hello!';
}
}
returnFunction์ ํจ์๋ฅผ ๋ฆฌํดํ๋ฏ๋ก ๊ณ ์ฐจํจ์
์ ํ ์์ด๋ค.
๊ณ ์ฐจํจ์ ์ฌ์ฉ์ <๋ค๋ฅธ ํจ์์ ์ ๋ฌ ์ธ์>๊ฐ ๋๋ ํจ์๋ฅผ
์ฝ๋ฐฑํจ์
๋ผ๊ณ ํ๋ค.
ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ๋ ํจ์๋
์ปค๋ง ํจ์
๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ํ๋ค.(์ฉ์ด๋ ์ค์ํ์ง ์๋ค.)
function compose(func1, func2) {
return function(num){
return func1(func2(num));
}
}
func1
๊ณผ func2
๋ compose ํจ์์ ์ํด ํธ์ถ๋๋ฏ๋ก ์ฝ๋ฐฑํจ์
์ ํด๋นํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋ด์ฅ๋ ๊ณ ์ฐจํจ์๊ฐ ์กด์ฌํ๋๋ฐ, ๋๋ถ๋ถ ๋ฐฐ์ด ๋ฉ์๋๊ฐ ์ด์ ํด๋นํ๋ค.
๋ฐฐ์ด ๋ฉ์๋์๋ filter
, map
, reduce
๋ฑ์ด ์๋ค.
filter ๋ฉ์๋
-> "true์ ํด๋นํ๋ ๊ฐ๋ง ์ถ์ถ"ํ๋ ๊ฒ์ ๊ธฐ์ตํ์
- ๊ธฐ๋ฅ : ํน์ ์กฐ๊ฑด์ ๋ง์กฑ(
true
)ํ๋ ์์๋ฅผ ์ถ์ถ.- ๊ธฐ๋ณธ ํํ :
arr.filter(callback)
์ด๋ ๊ฑธ๋ฌ๋ด๊ธฐ ์ํ ์กฐ๊ฑด ํจ์๊ฐ filter ๋ฉ์๋์ ์ ๋ฌ ์ธ์์ ํด๋นํ๋ฏ๋ก ๊ณ ์ฐจํจ์์ด๋ค.
filter ๋ฉ์๋ ์ฌ์ฉ ์์
function removeElement(arr, discarder) { return arr.filter(function (el) { if (el !== discarder) { return true; //true์ธ ์์๋ง์ ๋ฐํํ๋ค. } return false; }); // ์ if๋ฌธ์ // return el !== discarder ์ ๋์ผ }
์ฝ๋ฐฑํจ์์์ ๋ฐฐ์ด ๊ฐ์ด ์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ
true
๋ฅผ ๋ฐํํ๋ค.
map ๋ฉ์๋
- ๊ธฐ๋ฅ : ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ก ๋งคํ ํ ๋ ์ฌ์ฉ
- ๊ธฐ๋ณธ ํํ :
arr.map(callback)
map ๋ฉ์๋ ์ฌ์ฉ ์์
const nums = [1,2,3,4,5] function addPlusOne(nums){ return nums.map(function(element){ return element + 1; }) } console.log(nums) // [2, 3, 4, 5, 6]
reduce ๋ฉ์๋
- ๊ธฐ๋ฅ : ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด
ํ๋์ ๊ฒฐ๊ณผ๊ฐ
์ ๋ฐํํ๋ค.
( ex. ๋ฐฐ์ด์ ๋ง์ /๋บ์ ,์ต๋/์ต์, ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ์ถ๋ ฅ ๋ฑ )- ๊ธฐ๋ณธ ํํ :โจ
arr.reduce(callback[, initialValue])
- ํน์ง
- reduce ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ด๊ธฐ๊ฐ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
- ์ฝ๋ฐฑํจ์์ ๋งค๊ฐ๋ณ์๋ก accumulator, currentValue, currentIndex, array๋ฅผ ๋ฐ์ ์ ์๋ค.
reduce ๋ฉ์๋ ์ฌ์ฉ ์์
const nums = [1,2,3,4,5] function sum(num){ return nums.reduce(function(acc,cur){ return acc + cur },0) //ํจ์์ ์ธ์๋ก ์ด๊ธฐ๊ฐ์ ์ค์ ํ ์ ์๋ค. } console.log(nums) // 15