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面向对象(极简主义法minimalist approach)
Jul 17 Javascript
Javascript判断对象是否相等实现代码
Mar 18 Javascript
jQuery菜单插件superfish使用指南
Apr 21 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 Javascript
JS比较两个数值的大小实例
Nov 25 Javascript
javascript输出AscII码扩展集中的字符方法
Dec 26 Javascript
原生JS实现九宫格抽奖效果
Apr 01 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
Vue模拟数据,实现路由进入商品详情页面的示例
Aug 31 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
vue-week-picker实现支持按周切换的日历
Jun 26 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
redis 队列操作的例子(php)
2012/04/12 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php简单日历函数
2015/10/28 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
[00:11]战神迅矛
2019/03/06 DOTA
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
python通过索引遍历列表的方法
2015/05/04 Python
Python实现感知机(PLA)算法
2017/12/20 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
管理标语大全
2014/06/24 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
元宵节寄语大全
2015/02/27 职场文书
新闻稿怎么写
2015/07/18 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
PHP正则表达式之RCEService回溯
2022/04/11 PHP
Android实现图片九宫格
2022/06/28 Java/Android
Nginx配置使用详解
2022/07/07 Servers