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 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
用js实现层随着内容大小动态渐变改变 推荐
Dec 19 Javascript
JQuery live函数
Dec 24 Javascript
js有序数组的连接问题
Oct 01 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
基于jQuery实现在线选座之高铁版
Aug 24 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
Oct 23 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
Jul 19 Javascript
vue的mixins属性详解
Mar 14 Javascript
vue src动态加载请求获取图片的方法
Oct 17 Javascript
react-native滑动吸顶效果的实现过程
Jun 03 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
在PWS上安装PHP4.0正式版
2006/10/09 PHP
超级简单的php+mysql留言本源码
2009/11/11 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
python 如何引入协程和原理分析
2020/11/30 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
高中生毕业学习总结的自我评价
2013/11/14 职场文书
策划主管的工作职责
2013/11/24 职场文书
医药个人求职信范文
2014/01/29 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
信访稳定工作汇报
2014/10/27 职场文书
委托公证书样本
2015/01/23 职场文书
老公婚前保证书
2015/02/28 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书