function fruit(sweetness) {
return sweetness * 3;
}
const pear = fruit(1);
const strawberry = fruit(5);
const watermelon = fruit(3);
-> 함수를 배열이나 객체에도 넣을 수 있음
const fruitsArr = [fruit(1), fruit(3), fruit(5)];
const fruitsObj = {
pear: fruit(1),
strawberry: fruit(5),
watermelon: fruit(3)
};
-> 다른 함수의 인자로도 넘겨줄 수 있음
function strawberry(fruit) {
return fruit(5);
}
strawberry(fruit);
-> 함수가 다른 함수를 반환하는 것도 가능
function f(x) {
return function(y) { ... }
}
📌 HOF : 함수를 인자로 받거나, 함수를 반환하는 함수
const twice = function(f, v) {
return f(f(v));
};
const plusOne = function(v) {
return v + 1;
};
console.log(twice(plusOne, 1)); // 3
twice()
는 함수를 인자로 받아 2번 반복해주는 HOF이다.0~99까지 출력하라는 요구를 받으면, for문만으로도 가능하지만
function repeat(n) {
for (let i = 0; i < n; i++) {
console.log(i);
}
}
repeat(100);
이렇게하면 repeat() 괄호 안에 숫자만 바꿔주면 쉽게 제어할 수 있다.
그런데 여기에 9999까지 출력하는 동시에 배열에 담으라고 한다면?
function repeat(n, fn) {
for (let i = 0; i < n; i++) {
fn(i);
}
}
// 0부터 9999까지 출력하기
repeat(10000, console.log);
// 0부터 9999까지 배열에 담기
const list = [];
repeat(10000, (i) => {list.push(i)});
function fillArray(n, fn) {
let array = [];
for (let i = 0; i < n; i++) {
array.push(fn(i));
}
return array;
}
function makeItem(i) {
return (i) => `item${i}`;
}
const array = fillArray(7, makeItem);
console.log(array);
// [ 'item0', 'item1', 'item2', 'item3', 'item4', 'item5', 'item6' ]
Filter
, Map
, Reduce
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]