JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析


Posted in Javascript onMay 22, 2019

本文实例讲述了JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法。分享给大家供大家参考,具体如下:

高阶函数(higher-order functions),就是返回其它函数的函数,或者使用其它函数作为它的参数的函数。

使用函数作为参数

因为函数本身就是一个值,所以可以让函数作为参数传递给其它的函数。JavaScript 有些函数就需要用到函数类型的参数,比如 Array.map。

比如我有一组数据:

const names = ['小猫', '小狗', '小刺猬']

我要分别问候一下这组数据里的每个项目:

const greetings = names.map(function(name) {
 return `hi ~ ${name}`
})
console.log(greetings)
// ["hi ~ 小猫", "hi ~ 小狗", "hi ~ 小刺猬"]

上面的 map 方法里用了一个匿名函数作为它的参数。在这个函数里面,我们在数组里的每个项目的前面都加上了一个 “hi ~” ,map 会返回一个新的数组,这个数组我交给了 greetings 变量。

用箭头函数会更简洁一些:

const greetings = names.map(name => `hi ~ ${name}`)

高阶函数

高阶函数(higher-order functions)。在 JavaScript 里面,函数跟普通的对象没啥大区别,所以你可以让函数作为参数传递到其它的函数里面,你也可以在函数里返回函数。使用函数作为参数的函数,或者返回函数的函数,这些函数被称为高阶函数(higher-order functions)。

比如刚才我们用的 map 就是一个高阶函数,因为它会用到一个函数作为它的参数。

再看一个例子:

const robot = (name, action) => {
 return action(name)
}
const greet = (name) => {
 return `hello, ${name}`
}
const greeting = robot(' 您好 ', greet)
// 返回 “ hello, 您好 ”

robot 是个函数,它支持两个参数,name 与 action,这里的 action 参数的类型是一个函数。在 robot 里面返回了 action ,并且把 name 参数的值交给了 action。接下面我们又定义了一个函数叫 greet,它接受一个参数是 name ,这个函数会返回一个字符串。

然后我们用了一下 robot 这个函数,设置了一下它的两个参数的值,name 参数的值是 ' 您好 ‘,action 参数的值是我们定义的 greet 这个函数。执行的结果就会是:

hello, 您好

我们可以再去定义一下函数:

const goodbye = (name) => {
 return `bye, ${name}`
}

然后再用一下 robot 函数:

const byeBye = robot(' 您好 ', goodbye)

这次会返回:

bye, 您好

完整的例子:

const robot = (name, action) => {
 return action(name)
}
const greet = (name) => {
 return `hello, ${name}`
}
const greeting = robot(' 您好 ', greet)
console.log(greeting)
const goodbye = (name) => {
 return `bye, ${name}`
}
const byeBye = robot(' 您好 ', goodbye)
console.log(byeBye)

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

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

Javascript 相关文章推荐
JavaScript 不只是脚本
May 30 Javascript
InnerHtml和InnerText的区别分析
Mar 13 Javascript
加载 Javascript 最佳实践
Oct 30 Javascript
遍历jquery对象的代码分享
Nov 02 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
Oct 16 Javascript
jQuery实现动态添加和删除一个div
Aug 12 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
Aug 11 Javascript
微信小程序 实战程序简易新闻的制作
Jan 09 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
jQuery实现火车票买票城市选择切换功能
Sep 15 jQuery
JavaScript门面模式详解
Oct 19 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
May 22 #Javascript
详解在React-Native中持久化redux数据
May 22 #Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
May 22 #Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 #Javascript
jQuery Migrate 插件用法实例详解
May 22 #jQuery
自定义Vue组件打包、发布到npm及使用教程
May 22 #Javascript
Vue中的组件及路由使用实例代码详解
May 22 #Javascript
You might like
web方式ftp
2006/10/09 PHP
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
php.ini 中文版
2006/10/28 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
layui文件上传实现代码
2017/05/20 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
python运行其他程序的实现方法
2017/07/14 Python
一百行python代码将图片转成字符画
2021/02/19 Python
python模块导入的细节详解
2018/12/10 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
介绍一下Ruby的特点
2013/01/20 面试题
乡镇个人对照检查材料
2014/08/22 职场文书
高中开学感言
2015/08/01 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
Python OpenCV超详细讲解基本功能
2022/04/02 Python