iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >在JavaScript中使用高阶函数的方法
  • 203
分享到

在JavaScript中使用高阶函数的方法

2024-04-02 19:04:59 203人浏览 独家记忆
摘要

目录javascript将函数视为一等公民高阶函数接收函数作为参数代码可重用性返回函数高阶函数模板正在使用高阶函数总结将另一个函数作为参数的函数,或者定义一个函数作为返回值的函数,被

将另一个函数作为参数的函数,或者定义一个函数作为返回值的函数,被称为高阶函数。

JavaScript可以接受高阶函数。这种处理高阶函数的能力以及其他特点,使JavaScript成为非常适合函数式编程编程语言之一。

JavaScript将函数视为一等公民

你也许听说过,JavaScript函数是一等公民。这意味着,在JavaScript中函数是对象。

它们的类型是Object,它们可以作为一个变量的值被分配,而且它们可以像其他引用变量一样被传递和返回。

一等函数赋予了JavaScript特殊的能力,使我们能够从高阶函数中获益。

由于函数是对象,且JavaScript是流行的编程语言之一,因此其支持函数式编程的原生方法。

事实上,一等函数是JavaScript的原生方法。我敢打赌你在使用他们的时候甚至都没有想过正在使用函数。

高阶函数接收函数作为参数

如果你做过很多JavaScript开发,你可能遇到过使用回调函数的情况。

回调函数是一个在操作结束时执行的函数,一旦所有其他操作完成后便会执行。

通常情况下,我们把这个函数作为最后的参数传递,在其他参数之后。它通常被定义为内联的匿名函数。回调函数依靠的是JavaScript处理高阶函数的能力。

JavaScript是一个单线程语言。这意味着同一时间只有一个操作会被执行。

为了避免操作或系统的主线程互相阻塞(这将导致死),引擎会确保所有操作按顺序执行。它们沿着这个单线程排队,直到安全产生另一个代码事务

将一个函数作为参数传入,并在父函数的其他操作完成后运行该函数的能力,对于支持高阶函数的语言来说是至关重要的。

JavaScript中的回调函数允许异步行为,因此脚本可以在等待结果的同时继续执行其他函数或操作。

在处理可能在不确定的时间段后返回结果的资源时,传递回调函数的能力至关重要。

这种高阶函数模式在网络开发中非常有用。一个脚本可以向服务器发送一个请求,然后需要在响应到来时进行处理,而不需要了解服务器的网络延迟或处理时间。

node.js经常使用回调函数来有效地利用服务器资源。这种异步方法对于等待用户输入后再执行函数的应用程序来说也很有用。

考虑一下这个简单的JavaScript片段,它为一个按钮添加了一个事件监听器。

document.getElementById("clicker").addEventListener("click", function() {
alert("you triggered " + this.id);
});

这段脚本使用内联匿名函数来显示一个alert

但它也可以很容易地使用一个单独定义的函数,并将这个命名函数传递给addEventListener方法。

var proveIt = function() {
alert("you triggered " + this.id);
};

document.getElementById("clicker").addEventListener("click", proveIt);

我们这样做不仅仅是展示了高阶函数。我们使代码更可读,更有弹性,并为不同的任务分离了功能(监听点击事件与提醒用户)。

代码可重用性

我们的proveIt()函数在结构上独立于它周围的代码,总是返回被触发的元素的id。这种函数设计的方法是函数式编程的核心。

这段代码可以存在于任何你用元素的id显示alert的上下文中,并且可以被任何事件监听器调用。

用一个单独定义和命名的函数取代内联函数的能力为我们提供了无限可能。

在函数式编程中,我们试图开发不改变外部数据的纯函数,并且每次对相同的输入返回相同的结果。

现在我们有了一个基本的工具,可以帮助我们开发一个小型的、有针对性的高阶函数库,你可以在任何应用程序中使用。

请注意,我们把 proveIt 而不是 proveIt() 传递给我们的 addEventListener 函数。

  • 当你不带括号传递一个函数的名字时,你传递的是函数对象本身。
  • 当你用圆括号传递函数时,你是在传递执行该函数的结果。

返回函数

除了将函数作为参数之外,JavaScript还允许函数将其他函数作为结果返回。

这是说得通的,因为函数是简单的对象。对象(包括函数)可以被定义为一个函数的返回值,就像字符串数组或其他值。

但是函数作为结果返回是什么意思呢?

函数是分解问题和创建可重用代码片断的一种强大方式。当我们将一个函数定义为一个高阶函数的返回值时,它可以作为新函数的模板。

假如你读了太多关于"千禧一代"的文章,感到厌烦。你决定每当出现"千禧一代"这个词时,你都要用 "蛇人"这个短语来代替它。

你可能是简单地写一个函数,在你传递给它的任何文本上执行该文本替换。

var snakify = function(text) {
return text.replace(/millenials/ig, "Snake People");
};
console.log(snakify("The Millenials are always up to something."));
// The Snake People are always up to something.

这种写法是有效的,但不够通用。你可能想为其他情况写一个替换函数:

var hippify = function(text) {
return text.replace(/baby boomers/ig, "Aging Hippies");
};
console.log(hippify("The Baby Boomers just look the other way."));
// The Aging Hippies just look the other way.

但是,如果你决定要做一些更复杂的事情来保留原始字符串中的大小写呢?你将不得不修改你的两个新函数来做到这一点。

这很麻烦,而且会使你的代码更加脆弱,也更难阅读。在这样的情况下,我们可以使用高阶函数作为解决方案。

高阶函数模板

你真正想要的是能够在模板函数中用任何其他术语替换任何术语的灵活性,并将该行为定义为一个基础函数,你可以在此基础上建立新的自定义函数。

有了将函数指定为返回值的能力,JavaScript提供了让这种情况更便捷的方法:

var attitude = function(original, replacement, source) {
	return function(source) {
		return source.replace(original, replacement);
	};
};

var snakify = attitude(/millenials/ig, "Snake People");
var hippify = attitude(/baby boomers/ig, "Aging Hippies");

console.log(snakify("The Millenials are always up to something."));
// The Snake People are always up to something.
console.log(hippify("The Baby Boomers just look the other way."));
	// The Aging Hippies just look the other way.

我们所做的是把做实际工作的代码隔离到一个通用的、可扩展的attitude函数中。它封装了所有需要修改任何输入字符串的工作:使用原始短语作为初始值,并输出一个具有某种态度的替换短语。

当我们将这个新函数定义为对attitude高阶函数的引用,并预先填入它所接收的前两个参数时,我们会得到什么?它允许新函数接收你传递给它的任何文本,并在我们定义的返回函数中使用该参数作为attitude函数的输出。

JavaScript函数不关心传递给它们的参数的数量。

如果缺少第二个参数,函数将把它视为undefined。当我们选择不提供第三个参数,或任何数量的额外参数时,它也会这样做。

此外,你可以在以后再传入那个额外的参数。你可以在定义了你想调用的高阶函数后这样做,就像刚才演示的那样。

我们正在创建一个模板高阶函数来返回另一个函数。然后,我们把这个新返回的函数,除去一个属性,定义为模板函数的一个自定义实现。

你以这种方式创建的所有函数将继承高阶函数的工作代码。然而,你可以用不同的默认参数预先定义它们。

正在使用高阶函数

高阶函数对于JavaScript的工作方式来说是起码的,你已经在使用它们了。

每当你传递一个匿名函数或回调函数时,你实际上是把所传递的函数返回的值,作为另一个函数的参数(如箭头函数)使用。

开发人员在学习JavaScript的早期就熟悉高阶函数。它是JavaScript设计中固有的,所以以后才需要学习驱动箭头函数或回调的概念。

为返回其他函数的函数赋值的能力扩展了JavaScript的便利性。高阶函数允许我们创建自定义命名的函数,用一阶函数的共享模板代码执行专门的任务。

这些函数中的每一个都可以继承高阶函数中的任何改进。这可以协助我们避免代码重复,并保持我们的源代码的整洁和可读性。

如果你确保你的函数是纯净的(它们不改变外部值,并且对于任何给定的输入总是返回相同的值),你可以创建测试来验证当你更新一阶函数时,你的代码变化不会破坏任何东西。

总结

现在你知道了高阶函数的工作原理,你可以开始考虑如何在自己的项目中利用这个概念了。

JavaScript的一个好处是,你可以将函数技术与你已经熟悉的代码混合在一起。

即便你一开始只是为了使用高阶函数而使用,你也会很快熟悉它们所提供的额外灵活性。

现在使用高阶函数的一点工作可以在未来几年内改善你的代码。

到此这篇关于如何在JavaScript中使用高阶函数的文章就介绍到这了,更多相关js高阶函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 在JavaScript中使用高阶函数的方法

本文链接: https://www.lsjlt.com/news/167790.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在JavaScript中使用高阶函数的方法
    目录JavaScript将函数视为一等公民高阶函数接收函数作为参数代码可重用性返回函数高阶函数模板正在使用高阶函数总结将另一个函数作为参数的函数,或者定义一个函数作为返回值的函数,被...
    99+
    2024-04-02
  • python高阶函数使用的方法
    今天小编给大家分享一下python高阶函数使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、高阶函数函数定义pyt...
    99+
    2023-07-02
  • JavaScript高阶函数怎么用
    本篇内容主要讲解“JavaScript高阶函数怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript高阶函数怎么用”吧! 数组方法 高阶函...
    99+
    2024-04-02
  • Lambda和高阶函数怎么在Kotlin 中使用
    本篇文章为大家展示了Lambda和高阶函数怎么在Kotlin 中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Lambda是什么Lambda是一种函数的表示方式(言外之意也就是说一个Lambda...
    99+
    2023-05-30
    kotlin lambda 高阶函数
  • JavaScript高阶API数组reduce函数使用示例
    目录正文1.求数组中所有对象的年龄和2.按照年龄分组3.将数组对象转化为对象4.参数打印总结正文 前面我们讲了数组的一些基本方法,今天给大家讲一下数组的reduce(),它是数组里面...
    99+
    2022-11-13
    JavaScript数组API reduce JavaScript API reduce
  • JavaScript中常见的高阶函数总结
    目录前言map函数reduce函数filter函数sortevery方法find方法findIndex方法foreach方法总结前言 一个函数可以接受另一个函数作为参数,就把这个函数...
    99+
    2024-04-02
  • 8个JavaScript中高阶函数的运用分享
    目录函数作为参数传递函数作为返回值函数柯里化函数组合面向切面编程函数式编程闭包复杂的例子函数作为参数传递 高阶函数可以接受一个或多个函数作为参数,这些函数可以在高阶函数中被调用,实现...
    99+
    2023-05-16
    JavaScript高阶函数运用 JavaScript高阶函数
  • Python常见内置高阶函数即高阶函数用法
    目录1.什么是高阶函数?2.高阶函数-map、filter、reduce2.1map函数2.2filter函数2.3reduce函数1.什么是高阶函数?   高阶函数:一个函数可...
    99+
    2024-04-02
  • javascript高阶函数指的是什么
    这篇文章主要介绍了javascript高阶函数指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说明可以将函数作为参数传递给另一个函数。将函数作为另一个函数的返回结果。...
    99+
    2023-06-20
  • Javascript 常见的高阶函数详情
    目录一、常见的高阶函数1.1、filter1.2、map1.3、reduce高阶函数,英文叫 Higher Order function。一个函数可以接收另外一个函数作为参数,这种函...
    99+
    2024-04-02
  • Python高阶函数map()怎么使用
    这篇文章主要介绍了Python高阶函数map()怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python高阶函数map()怎么使用文章都会有所收获,下面我们一起来看看吧。简介:格式:map(funct...
    99+
    2023-07-05
  • JavaScript数组对象高阶函数reduce的妙用详解
    目录reduce 是 JavaScript 数组对象上的一个高阶函数计算数组的平均数求数组的最大值求数组的最小值数组去重计算数组中每个元素出现的次数实现数组分组计算数组中连续递增数字...
    99+
    2023-05-16
    JavaScript数组对象reduce JavaScript高阶函数reduce
  • JavaScript 闭包与高阶函数是怎样的
    JavaScript 闭包与高阶函数是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。「JavaScript 中,函数是一等公民」,在各种...
    99+
    2024-04-02
  • 详解Python中高阶函数(map,filter,reduce,sorted)的使用
    目录什么是高阶函数自定义一个高阶函数常用的内置高阶函数map函数参数说明功能实例filter函数功能实例reduce函数功能实例sorted函数参数说明功能实例sort和sorted...
    99+
    2024-04-02
  • Python3的高阶函数怎么用
    本篇内容介绍了“Python3的高阶函数怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.高阶函数# 1.变量指向函数#&n...
    99+
    2023-06-28
  • PHP8中的数组函数:array_pad()的高效使用方法
    PHP8是最新的PHP版本,它提供了许多新的函数和改进的功能,其中之一是数组函数array_pad()。在本文中,我们将探讨array_pad()函数的高效使用方法。什么是array_pad()函数array_pad()函数可以将一个数组填...
    99+
    2023-05-16
    PHP 数组函数 array_pad()
  • python高阶函数使用教程示例
    目录一、高阶函数函数定义函数名可作为返回值、也可作为参数(1)函数名作为参数(2)函数名作为返回值二、常用的高阶函数(1)map(function,iterable)(2)filte...
    99+
    2024-04-02
  • Python函数进阶的使用方法实例分析
    今天小编给大家分享一下Python函数进阶的使用方法实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、函数的命名空间...
    99+
    2023-06-30
  • JavaScript中的高阶函数和柯里化以及组合函数是怎样的
    这期内容当中小编将会给大家带来有关JavaScript中的高阶函数和柯里化以及组合函数是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。面向对象编程和函数式编程是两种...
    99+
    2024-04-02
  • 聊聊javascript函数参数的使用方法
    JavaScript是一种常用的编程语言,常常被用来为网站和应用程序创建交互性用户界面。函数是JavaScript中最常用的概念之一,允许开发人员在代码中组织和重复使用代码块。函数可以接受多个参数,开发人员可以根据需求灵活使用它们。本文将介...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作