高阶函数的定义
- 如果一个函数的参数是一个函数,这个函数就是一个高阶函数
- 如果一个函数返回了一个函数 当前这个函数也是一个高阶函数
所以常见的定时器就是一个高阶函数
setTimeout(() => {}); 定时器就是一个高阶函数
高阶函数的应用
高阶函数可以给原有的函数增添一些扩展 例如原有一个方法中是“吃”,现在想“饿了”的时候 再吃
// 原有函数
function eat(a,b) {
console.log('吃',a,b);
}
// 在Function的原型对象上添加一个status方法,接收一个回调函数(此时status就是一个高阶函数), 返回一个函数
Function.prototype.status = function (callback) {
return (...args) => {
callback();
this(...args); // 箭头函数没有this,所以这个this是调用者
};
};
// eat 就是status中的this
let myStatus = eat.status(() => {
console.log('饿了');
});
myStatus('米饭', '水果'); // 饿了 吃 吃 米饭 水果