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 两个窗体之间传值实现代码
Sep 25 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
浅谈javascript原型链与继承
Jul 13 Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 Javascript
跨域资源共享 CORS 详解
Apr 26 Javascript
Jqprint实现页面打印
Jan 06 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
Jan 25 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 Javascript
浅谈vue引入css,less遇到的坑和解决方法
Jan 20 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
Sep 05 jQuery
vue-cli的工程模板与构建工具详解
Sep 27 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
.htaccess文件保护实例讲解
2011/02/06 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
jquery 获取json数据实现代码
2009/04/27 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
浅析Python中signal包的使用
2015/11/13 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
如何在Django项目中引入静态文件
2019/07/26 Python
python包的导入方式总结
2021/03/02 Python
大学生找工作推荐信范文
2013/11/28 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
丧事主持词大全
2014/04/02 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
户籍证明模板
2014/09/28 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
土地租赁协议书
2015/01/29 职场文书
go xorm框架的使用
2021/05/22 Golang
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android