Appearance
高阶函数
本节目标:理解“高阶函数”的核心思路,并能把它用于实际开发或面试表达。
说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。 把函数作为参数或者返回值的一类函数。
before函数 给所有函数添加一个公共方法; 这个方法是一个高阶函数; 它接受一个函数作为参数,并返回一个新函数; 这个返回的新函数内部,我们依次执行参数方法,再执行自身;
Function.prototype.before= function
(beforeFn){return () =\> {
beforeFn();this();}
}
functionfn(){
console.log('source')
}
constnewFn =
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(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,其实就是给原函数增加一层,不用管原函数内部实现
