浅谈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 相关文章推荐
jquery imgareaselect 使用利用js与程序结合实现图片剪切
Jul 30 Javascript
jquery ajax abort()的使用方法
Oct 28 Javascript
node.js操作mysql(增删改查)
Jul 24 Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 Javascript
js canvas实现擦除动画
Jul 16 Javascript
js阻止冒泡和默认事件(默认行为)详解
Oct 20 Javascript
Vue数据驱动模拟实现2
Jan 11 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
Jan 18 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
JS实现水平移动与垂直移动动画
Dec 19 Javascript
JS面向对象之多选框实现
Jan 17 Javascript
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
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
PHP MSSQL 存储过程的方法
2008/12/24 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
JQuery toggle使用分析
2009/11/16 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python生成随机验证码的两种方法
2015/12/22 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
描述内存分配方式以及它们的区别
2016/10/15 面试题
初中生学习的自我评价
2013/11/14 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
新闻编辑求职信
2014/07/13 职场文书
办理房产证委托书
2014/09/18 职场文书
大学学生个人总结
2015/02/15 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
MySQL查询日期时间
2022/05/15 MySQL
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js