javascript 高阶函数是什么_有哪些常见例子【教程】

9次阅读

高阶函数是指以函数为参数或返回函数作为结果的函数,如mapFilterreduce、debounce、once等;其核心判断标准是参数含function类型或返回值为function,与复杂度无关。

javascript 高阶函数是什么_有哪些常见例子【教程】

高阶函数不是“更高级的函数”,而是指以函数为参数,或返回函数作为结果的函数。这是 javaScript 函数式编程的基础能力,不是语法糖,而是语言原生支持的特性。

什么是高阶函数:看两个关键特征

判断一个函数是不是高阶函数,只看它是否满足以下任一条件:

  • 接收至少一个 function 类型的参数(比如 Array.prototype.map 的第一个参数)
  • 返回值是 function(比如 currydebounce 的实现)

注意:functionjavascript 中的一等公民,所以能被赋值、传参、返回——这正是高阶函数存在的前提。不满足这两点的函数,哪怕写得再复杂,也不是高阶函数。

常见内置高阶函数:map、filter、reduce 都算

这些方法本身是数组原型上的方法,但它们接受回调函数作为参数,因此属于高阶函数:

立即学习Java免费学习笔记(深入)”;

  • arr.map(callback)callback 被调用时接收 itemindexarray,返回新数组
  • arr.filter(callback)callback 返回布尔值,决定是否保留当前项
  • arr.reduce(callback, initialValue)callback 接收 accumulatorcurrentValue,逐步累积

它们的共同点是:不修改原数组、不可变、可链式调用。但容易忽略的是——如果传入的 callback 是箭头函数且用了隐式返回,要注意括号缺失导致返回 undefined(例如 arr.map(x => { x * 2 }) 实际返回 [undefined])。

手写高阶函数:debounce 和 once 最常用

这类函数不操作数据,而是“包装”另一个函数,改变其执行时机或次数:

  • debounce(fn, delay):返回一个新函数,该函数在连续触发后,只执行最后一次(常用于搜索框输入防抖)
  • once(fn):返回一个新函数,确保 fn 只执行一次,后续调用直接返回上次结果

示例(简化版 once):

function once(fn) {   let called = false;   let result;   return function(...args) {     if (!called) {       result = fn.apply(this, args);       called = true;     }     return result;   }; }

注意:once 必须保存 this 上下文和参数,否则绑定失效;debounce 则需用 clearTimeout 清除前序定时器,漏掉这步就会重复触发。

容易混淆的点:箭头函数、bind、IIFE 不是高阶函数

这些常被误认为“高阶”,但其实不符合定义:

  • const add = (a) => (b) => a + b:这个 add(1) 返回函数,所以 add 是高阶函数;但单独的箭头函数语法本身不是
  • fn.bind(obj):返回新函数,但 bind 是内置方法,它确实是高阶函数;不过日常说“用 bind 改变 this”时,重点不在高阶性,而在绑定行为
  • (function(){})():IIFE 是立即执行,不接收函数也不返回函数,不属于高阶函数

真正要识别高阶函数,就盯住「参数里有没有 function」或「return 后面是不是 function 表达式/声明」——其余都是干扰项。

text=ZqhQzanResources