Skip to content

高阶函数 ​

本节目标:理解“高阶函数”的核心思路,并能把它用于实际开发或面试表达。

说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。 把函数作为参数或者返回值的一类函数。

before函数 给所有函数添加一个公共方法; 这个方法是一个高阶函数; 它接受一个函数作为参数,并返回一个新函数; 这个返回的新函数内部,我们依次执行参数方法,再执行自身;

Function.prototype.before

= function

(beforeFn)

{return () =\> {

beforeFn();
this();
}
}
function
fn()

{

console.log('source')
}
const

newFn =

fn.before(say

=\> {

console.log('say');
});
newFn();

思考:

  • beforFn的参数如何传递?
  • 作为参数的函数,如何给它传递参数?
  • 函数的回调函数,参数是如何传递的?
    • 一般是在函数得出结果后,将结果传递给回调函数;
// 扩展方法 会用到高阶函数
function core(...args) { // 核心代码
  // ....
  console.log('core', args);
  // ....
}
// 给core函数增加一些额外的逻辑 但是不能更改核心代码
Function.prototype.before = function (cb) {
  // this = core
  return (...args) => { // newCore  剩余运算符 可以把多个参数转化成数组
    cb();
    this(...args); // 拓展运算符
  }
}
let newCore = core.before(() => {
  console.log('before')
})
newCore('a', 'b');
  • 对函数进行扩展,又不变更原代码,可以使用高阶函数;
  • 即创建一个函数,这个函数内部返回一个新的函数;
  • 在这个新的函数内部,我们加入一些逻辑,比如我们先调用一些参数函数,再执行我们准备扩展的原函数;执行完原函数之后,还可以加入一些逻辑,比如afterFn; AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,其实就是给原函数增加一层,不用管原函数内部实现