浅谈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 相关文章推荐
HTML TO JavaScript 转换
Jun 26 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
JS关键字变色实现思路及代码
Feb 21 Javascript
在图片上显示左右箭头类似翻页的代码
Mar 04 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
jQuery中:checked选择器用法实例
Jan 04 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
Node.js巧妙实现Web应用代码热更新
Oct 22 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
Oct 29 Javascript
Javascript中this绑定的3种方法与比较
Oct 13 Javascript
JSON键值对序列化和反序列化解析
Jan 24 Javascript
vue实现tab切换外加样式切换方法
Mar 16 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/08/09 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
JS中操作JSON总结
2020/12/06 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
Python中dict和set的用法讲解
2019/03/28 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
群教个人对照检查材料
2014/08/20 职场文书
师德师风自我评价范文
2014/09/11 职场文书
大学学生会竞选稿
2015/11/19 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
六年级作文之预言作文
2019/10/25 职场文书