js高阶函数

本文介绍了JavaScript中的高阶函数概念,包括函数内部返回函数以及函数作为参数的情况,并通过面向切面编程(AOP)的应用场景展示了如何扩展函数功能。通过before和after方法实现函数的前置和后置扩展,实现在不修改原业务代码的情况下增加功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高阶函数?

  • 两种应用方式可称之为高阶函数
    1. 函数内部返回一个函数,外层函数可以叫做高阶函数
function A() {
  return function () {};
 }
  1. 函数的参数是一个函数,也是高阶函数
 function A(B) {
   B();
 }

举一个应用场景 (AOP)

  • AOP:即面向切面编程,可以理解为不动原有业务逻辑,额外增量扩展功能
// DEMO
function core(...args) {
  // 这是原有业务,我们希望不动这个原有业务,增量扩张,此时用到AOP的思路
  // 我想在这扩展......
  console.log(args); // 原业务
  // 我想在这扩展......
}

前置功能扩展

Function.prototype.before = function (cb) {
  return (...args) => {
    cb(); //额外以回调函数(高阶函数)方式扩展了一个前置功能
    this(...args); // this是谁?箭头函数不存在this,所以当前尖头函数没有怎么办?往上找...this最终指向调用者,也就是core
  };
};

后置功能扩展

Function.prototype.after = function (cb) {
  return (...args) => {
    this(...args);
    cb(); // 额外以回调函数方式(高阶函数)扩展一个后置功能
  };
};

调用

let newFunc_before = core.before(() => {
  console.log("before");
});
let newFunc_after = core.after(() => {
  console.log("after");
});

newFunc_before(1, 2, 3);
newFunc_after("a", "b", "c");

疑问?闭包是高阶函数吗?

  • 嗯…闭包确实是一个高阶函数,满足上述两个条件之一,即算高阶函数

附录:何为闭包?

// 一个函数定义和执行不在一个作用域必然形成闭包
function package() {
  return function () {};
}
// 典型闭包,一旦调用
  • package(); // 执行的其实是内部函数,package内部函数一直在被使用package就不会被回收(gc原理),所以才有闭包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值