浅谈javascript函数式编程


Posted in Javascript onSeptember 06, 2015

函数式编程,属于编程范式的一种

1 函数是第一公民,可以返回值,也可以作为其他函数的参数

//console是一个函数
function con(v){
 console.log(v)
}
// execute 也是一个函数
function execute(fn){
 fn(1)
}
//将con函数作为参数传进execute函数
execute(con) // 1

2 接近自然语言的写法

  晓池吃完饭然后就去洗澡 可以表现为eat().bathe()

// 吃饭函数
function eat(eat){
 this.e = eat;
 return this;
}
// 洗澡函数
function bathe(bathe){
 this.b = bathe;
 return this;
}

var person = eat("晓池在吃饭").bathe("晓池去洗澡了");
console.log(person.e) // 晓池在吃饭
console.log(person.b) // 晓池去洗澡了

 3 函数式编程的特性

  匿名函数,即没有名字的函数,在函数式编程中很常见,有时候我们需要通过它(不复用的函数)来完成部分功能,下面我们通过定义一个each函数来了解一下:

// 自定义each函数
function each(arr,func){
 var length = arr.length;
 for(var i = 0 ;i <length; i++){
  func(i,arr[i])
 }
}
// 执行each函数,传进一个匿名函数作为该函数的参数
each([1,2,3],function(i,v){
 console.log('key:' + i + ',value:' +v);
});
//输出内容
//key:0,value:1
//key:1,value:2
//key:2,value:3

 柯里化:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

//定义add函数,并返回一个函数
function add(num){
 return function(x){
   return num + x;
 }
}
add1 = add(1)
console.log(add1(3)) // 4

高阶函数:有函数作为参数或函数内部返回一个函数,都可称该函数为高阶函数 ,以上的each函数即算是高阶函数的一种。

结束语

实际的应用中,不会囿于函数式或者面向对象,通常是两者混合使用,事实上,很多主流的面向对象语言都在不断的完善自己,比如加入一些函数式编程语言的特征等,JavaScript 中,这两者得到了良好的结合,代码不但可以非常简单,优美,而且更易于调试。

Javascript 相关文章推荐
基于逻辑运算的简单权限系统(实现) JS 版
Mar 24 Javascript
jQuery根据纬度经度查看地图处理程序
May 08 Javascript
一行命令搞定node.js 版本升级
Jul 20 Javascript
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
javascript事件委托的用法及其好处简析
Apr 04 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
AngularJS自定义过滤器用法经典实例总结
May 17 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
详解使用JWT实现单点登录(完全跨域方案)
Aug 02 Javascript
vue组件暴露和.js文件暴露接口操作
Aug 11 Javascript
微信小程序实现购物车功能
Nov 18 Javascript
JS简单实现多级Select联动菜单效果代码
Sep 06 #Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 #Javascript
简单谈谈javascript Date类型
Sep 06 #Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 #Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 #Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 #Javascript
javascript日期操作详解(脚本之家整理)
Sep 05 #Javascript
You might like
为查询结果建立向后/向前按钮
2006/10/09 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
iframe实用操作锦集
2014/04/22 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
Node.js实现文件上传
2016/07/05 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
vue实现文件上传功能
2018/08/13 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
详解Python字符串对象的实现
2015/12/24 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
python解析多层json操作示例
2019/12/30 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
在校学生职业规划范文
2014/01/08 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
2014年车间工作总结
2014/11/21 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
仙境之桥观后感
2015/06/16 职场文书
如何写好闭幕词
2019/04/02 职场文书