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数组去重的六种方法汇总
Aug 16 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
Feb 19 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 Javascript
ES6中的箭头函数实例详解
Apr 06 Javascript
js中less常用的方法小结
Aug 09 Javascript
vue.js与后台数据交互的实例讲解
Aug 08 Javascript
vue+vue-router转场动画的实例代码
Sep 01 Javascript
vue文件运行的方法教学
Feb 12 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
Jul 08 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 Javascript
详解React路由传参方法汇总记录
Nov 29 Javascript
用vue设计一个日历表
Dec 03 Vue.js
浅谈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
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
Python异常处理总结
2014/08/15 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
python实现求最长回文子串长度
2018/01/22 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
Python import与from import使用及区别介绍
2018/09/06 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
前台领班岗位职责
2013/12/04 职场文书
英语教师自荐信
2014/05/26 职场文书
环保标语大全
2014/06/12 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书