JS高阶函数原理与用法实例分析


Posted in Javascript onJanuary 15, 2019

本文实例讲述了JS高阶函数原理与用法。分享给大家供大家参考,具体如下:

如果您正在学习JavaScript,那么您必须遇到高阶函数这个术语。这听起来复杂,其实不然。

使JavaScript适合函数式编程的原因是它接受高阶函数。

高阶函数在JavaScript中广泛使用。如果你已经用JavaScript编程了一段时间,你可能已经使用它们甚至不知道。

要完全理解这个概念,首先必须了解函数式编程是什么一等函数(first-Class Function)以及的概念。

函数式编程

在大多数简单的术语中,函数编程是一种编程形式,您可以将函数作为参数传递给其他函数,并将它们作为值返回。在函数式编程中,我们根据函数思考和编码。

JavaScript,Haskell,Clojure,Scala和Erlang是实现函数式编程的一些语言。

一等函数

如果您一直在学习JavaScript,您可能听说过JavaScript将函数视为一等公民。那是因为在JavaScript或任何其他函数式编程语言中,函数是对象。

在JavaScript中,函数是一种特殊类型的对象。他们是Function对象。

在JavaScript中,您可以使用其他类型(如对象,字符串或数字)执行的所有操作函数都可以执行。您可以将它们作为参数传递给其他函数(回调函数),将它们分配给变量并传递它们等等。这就是JavaScript中的函数被称为First-Class函数(一等函数)的原因。

高阶函数

高阶函数是对其他函数进行操作的函数,可以将它们作为参数或通过返回它们。简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回。

例如Array.prototype.mapArray.prototype.filter并且Array.prototype.reduce是一些高阶功能,内置的语言。

运行高阶函数

让我们看一下内置高阶函数的一些例子,看看它与我们不使用高阶函数的解决方案的比较。

Array.prototype.map

map()方法通过调用作为输入数组中每个元素的参数提供的回调函数来创建一个新数组。该map()方法将从回调函数中获取每个返回值,并使用这些值创建一个新数组。

传递给回调函数map()方法接受3个参数:elementindex,和array

假设我们有一个数组,我们想要创建一个新数组,其中包含第一个数组的每个值的两倍。让我们看看如何使用和不使用高阶函数来解决问题。

不用高阶函数

const arr1 = [1,2,3]; 
const arr2 = [];
for(let i = 0; i <arr1.length; i ++){ 
 arr2.push(arr1 [i] * 2); 
}
//打印[2,4,6] 
console.log(arr2);

使用高阶函数

const arr1 = [1,2,3];
const arr2 = arr1.map (function (item) { 
 return item * 2; 
}
console.log(arr2)

我们可以使用箭头函数语法使其更短

const arr1 = [1, 2, 3];
const arr2 = arr1.map(item => item * 2);
console.log(arr2);

创建我们自己的高阶函数

到目前为止,我们看到了语言中内置的各种高阶函数。现在让我们创建自己的高阶函数。

我们假设JavaScript没有原生map方法。我们可以自己构建它,从而创建我们自己的高阶函数。

假设我们有一个字符串数组,我们希望将此数组转换为整数数组,其中每个元素表示原始数组中字符串的长度。

const strArray = ['JavaScript', 'Python', 'PHP', 'Java', 'C'];
function mapForEach(arr, fn) {
 const newArray = [];
 for(let i = 0; i < arr.length; i++) {
 newArray.push(
  fn(arr[i])
 );
 }
 return newArray;
}
const lenArray = mapForEach(strArray, function(item) {
 return item.length;
});
// prints [ 10, 6, 3, 4, 1 ]
console.log(lenArray);

在上面的例子中,我们创建了一个高阶函数mapForEach,它接受一个数组和一个回调函数fn。此函数循环遍历提供的数组,并在每次迭代时调用函数调用fn内的回调函数newArray.push

回调函数fn接收数组的当前元素并返回该元素的长度,该元素存储在newArray。for循环完成后,newArray返回并分配给lenArray。

结论

我们已经了解了高阶函数和一个内置的高阶函数。我们还学习了如何创建自己的高阶函数。

简而言之,高阶函数是一个函数,它可以接收函数作为参数,甚至可以返回一个函数。高阶函数就像常规函数一样,具有接收和返回其他函数的附加能力,即参数和输出。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
jQuery LigerUI 使用教程入门篇
Jan 18 Javascript
简单js代码实现selece二级联动(推荐)
Feb 18 Javascript
JS中的Replace方法使用经验分享
May 20 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
Angular 应用技巧总结
Sep 14 Javascript
遍历json 对象的属性并且动态添加属性的实现
Dec 02 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
详解axios在node.js中的post使用
Apr 27 Javascript
微信小程序实现轮播图效果
Sep 07 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
Jul 20 Javascript
JS 图片压缩原理与实现方法详解
Apr 29 Javascript
JS立即执行函数功能与用法分析
Jan 15 #Javascript
vue-cli 目录结构详细讲解总结
Jan 15 #Javascript
webpack file-loader和url-loader的区别
Jan 15 #Javascript
jQuery+vue.js实现的多选下拉列表功能示例
Jan 15 #jQuery
Element输入框带历史查询记录的实现示例
Jan 15 #Javascript
微信小程序实现多选删除列表数据功能示例
Jan 15 #Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
Jan 15 #Javascript
You might like
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
10 个经典PHP函数
2013/10/17 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
用python写扫雷游戏实例代码分享
2018/05/27 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Django中URL的参数传递的实现
2019/08/04 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python 列表的清空方式
2020/01/13 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
python 实现aes256加密
2020/11/27 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
2014年行政部工作总结
2014/11/19 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书