浅谈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代码[多浏览器兼容]
Jun 07 Javascript
jquery tab插件制作实现代码
Jun 22 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
Mar 01 Javascript
EASYUI TREEGRID异步加载数据实现方法
Aug 22 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
Sep 04 Javascript
jQuery中的一些常见方法小结(推荐)
Jun 13 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 Javascript
微信小程序 登录的简单实现
Apr 19 Javascript
使用Node.js实现RESTful API的示例
Aug 01 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
Nov 05 Javascript
js函数和this用法实例分析
Mar 13 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
PHP中的密码加密的解决方案总结
2016/10/26 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
php 可变函数使用小结
2018/06/12 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
Ionic快速安装教程
2016/06/03 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
浅谈Python 对象内存占用
2016/07/15 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python基于opencv检测程序运行效率
2019/12/28 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
利用python绘制正态分布曲线
2021/01/04 Python
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
Java面向对象面试题
2016/12/26 面试题
秦兵马俑导游词
2015/02/02 职场文书
小班上学期个人总结
2015/02/12 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
详解Python生成器和基于生成器的协程
2021/06/03 Python