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 相关文章推荐
js 弹出菜单/窗口效果
Oct 30 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
js实现身份证号码验证的简单实例
Feb 19 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
详解JS中的快速排序与冒泡
Jan 10 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
Jan 18 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
JS模拟实现ECMAScript5新增的数组方法
Mar 20 Javascript
Vue官网todoMVC示例代码
Jan 29 Javascript
vue-resourc发起异步请求的方法
Feb 11 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 Javascript
vue element-ui中table合计指定列求和实例
Nov 02 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
PHP中文件上传的一个问题
2010/09/04 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
php记录日志的实现代码
2011/08/08 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
js实现简单图片拖拽效果
2021/02/22 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
python统计一个文本中重复行数的方法
2014/11/19 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
kali中python版本的切换方法
2019/07/11 Python
python同步windows和linux文件
2019/08/29 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
HEMA英国:荷兰原创设计
2018/08/28 全球购物
物控部经理职务说明书
2014/02/25 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android