浅谈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 相关文章推荐
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
Aug 04 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
Oct 20 Javascript
JavaScript中的比较操作符&gt;、=、
Dec 31 Javascript
javascript数组常用方法汇总
Sep 10 Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
zTree树形菜单交互选项卡效果的实现方法
Dec 25 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
Feb 08 Javascript
angularjs使用div模拟textarea文本框的方法
Oct 02 Javascript
express express-session的使用小结
Dec 12 Javascript
如何使用JavaScript实现栈与队列
Jun 24 Javascript
详解Vue router路由
Nov 20 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
对Django url的几种使用方式详解
2019/08/06 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
物理教育专业求职信
2014/06/25 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2014年车间工作总结
2014/11/21 职场文书
基层党支部承诺书
2015/04/30 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技
2022年显卡天梯图(6月更新)
2022/06/17 数码科技