把一个函数作为参数,或者把一个函数作为返回值,这样的结构成为”高阶函数“。
JavaScript的参数
值类型的参数
function plusFive(number) {
return number + 5;
};
plusFive(3); // 8
回调函数类型参数
在JavaScript中function可以当做参数传入function中:
const isEven = (n) => {
return n % 2 == 0;
}
const isEven = (n) => {
return n % 2 == 0;
}
let printMsg = (evenFunc, num) => {
const isNumEven = evenFunc(num);
console.log(`The number ${num} is an even number: ${isNumEven}.`)
}
// Pass in isEven as the callback function
printMsg(isEven, 4);
// Prints: The number 4 is an even number: True.
高阶函数(Higher-Order Functions)
当一个function被当做参数传入一个函数,或者被当做函数的返回,这种结构就被称为高阶函数。
.reduce()
reduce 函数迭代一个数组,返回一个累加的值。
const arrayOfNumbers = [1, 2, 3, 4];
const sum = arrayOfNumbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
});
console.log(sum); // 10
.forEach()
forEach 函数传入一个函数,按照数组元素的顺序遍历每一个元素。
const numbers = [28, 77, 45, 99, 27];
numbers.forEach(number => {
console.log(number);
});
.filter()
filter 函数按数组元素顺序遍历每个元素,回调函数需要返回一个布尔值,函数最终返回值为数组。
const randomNumbers = [4, 11, 42, 14, 39];
const filteredArray = randomNumbers.filter(n => {
return n > 5;
});
.map()
map 函数按数组元素顺序遍历每个元素,根据回调函数的逻辑返回一个新的数组。
const finalParticipants = [\'Taylor\', \'Donald\', \'Don\', \'Natasha\', \'Bobby\'];
// add string after each final participant
const announcements = finalParticipants.map(member => {
return member + \' joined the contest.\';
})
console.log(announcements);